linux/drivers
NeilBrown de393cdea6 md: make it easier to wait for bad blocks to be acknowledged.
It is only safe to choose not to write to a bad block if that bad
block is safely recorded in metadata - i.e. if it has been
'acknowledged'.

If it hasn't we need to wait for the acknowledgement.

We support that using rdev->blocked wait and
md_wait_for_blocked_rdev by introducing a new device flag
'BlockedBadBlock'.

This flag is only advisory.
It is cleared whenever we acknowledge a bad block, so that a waiter
can re-check the particular bad blocks that it is interested it.

It should be set by a caller when they find they need to wait.
This (set after test) is inherently racy, but as
md_wait_for_blocked_rdev already has a timeout, losing the race will
have minimal impact.

When we clear "Blocked" was also clear "BlockedBadBlocks" incase it
was set incorrectly (see above race).

We also modify the way we manage 'Blocked' to fit better with the new
handling of 'BlockedBadBlocks' and to make it consistent between
externally managed and internally managed metadata.   This requires
that each raidXd loop checks if the metadata needs to be written and
triggers a write (md_check_recovery) if needed.  Otherwise a queued
write request might cause raidXd to wait for the metadata to write,
and only that thread can write it.

Before writing metadata, we set FaultRecorded for all devices that
are Faulty, then after writing the metadata we clear Blocked for any
device for which the Fault was certainly Recorded.

The 'faulty' device flag now appears in sysfs if the device is faulty
*or* it has unacknowledged bad blocks.  So user-space which does not
understand bad blocks can continue to function correctly.
User space which does, should not assume a device is faulty until it
sees the 'faulty' flag, and then sees the list of unacknowledged bad
blocks is empty.

Signed-off-by: NeilBrown <neilb@suse.de>
2011-07-28 11:31:48 +10:00
..
accessibility
acpi
amba
ata
atm
auxdisplay
base mm: Move definition of MIN_MEMORY_BLOCK_SIZE to a header 2011-07-12 11:08:01 +10:00
bcma
block Merge branch 'for-3.0-important' of git://git.drbd.org/linux-2.6-drbd into for-linus 2011-06-30 10:10:50 +02:00
bluetooth
cdrom
char agp/intel: Fix typo in G4x_GMCH_SIZE_VT_2M 2011-07-13 07:44:27 +01:00
clk
clocksource
connector
cpufreq [CPUFREQ] fix cpumask memory leak in acpi-cpufreq on cpu hotplug. 2011-07-10 17:03:04 -04:00
cpuidle
crypto
dca
dio
dma
edac
eisa
firewire firewire: ohci: do not bind to Pinnacle cards, avert panic 2011-07-10 12:53:27 +02:00
firmware
gpio gpio: wm831x: add a missing break in wm831x_gpio_dbg_show 2011-07-15 14:03:30 -06:00
gpu Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2011-07-13 14:04:26 -07:00
hid
hwmon hwmon: (adm1275) Fix coefficients per datasheet revision B 2011-07-15 08:09:40 -07:00
hwspinlock
i2c Merge branch 'for-30-rc5/all-i2c' of git://git.fluff.org/bjdooks/linux 2011-07-07 16:29:29 -07:00
ide
idle
ieee802154
infiniband RDMA: Check for NULL mode in .devnode methods 2011-07-04 15:53:28 -07:00
input input: pmic8xxx-pwrkey: Do not use mfd_get_data() 2011-07-05 10:38:43 +02:00
isdn
leds drivers/leds/leds-pca9532.c: change driver name to be unique 2011-07-08 21:14:44 -07:00
lguest
macintosh
mca
md md: make it easier to wait for bad blocks to be acknowledged. 2011-07-28 11:31:48 +10:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2011-07-11 16:43:27 -07:00
memstick
message
mfd w1: ds1wm: add a reset recovery parameter 2011-07-08 21:14:44 -07:00
misc
mmc Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc 2011-07-13 16:47:31 -07:00
mtd
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2011-07-13 13:51:32 -07:00
nfc
nubus
of
oprofile
parisc
parport
pci PCI: conditional resource-reallocation through kernel parameter pci=realloc 2011-07-08 15:49:20 -07:00
pcmcia pcmcia: pxa2xx/vpac270: free gpios on exist rather than requesting 2011-07-11 14:26:34 +08:00
platform hp-wmi: fix use after free 2011-07-11 09:52:35 -04:00
pnp
power
pps
ps3
ptp
rapidio
regulator regulator: max8997: Fix setting inappropriate value for ramp_delay variable 2011-07-08 19:14:58 +01:00
rtc
s390
sbus
scsi [SCSI] isci: fix checkpatch errors 2011-07-03 14:26:24 -05:00
sfi
sh
sn
spi spi/s3c64xx: Bug fix for SPI with different FIFO level 2011-07-06 15:03:08 +09:00
ssb ssb: fix init regression of hostmode PCI core 2011-07-07 13:06:08 -04:00
staging Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2011-07-06 12:16:49 -07:00
target
tc
telephony
thermal
tty Merge branch 'at91/fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-2.6-arm-soc 2011-07-04 15:54:18 -07:00
uio
usb USB: additional regression fix for device removal 2011-07-07 13:29:33 -07:00
uwb
vhost
video vesafb: fix memory leak 2011-07-04 16:02:48 +09:00
virtio
vlynq
w1 w1: ds1wm: add a reset recovery parameter 2011-07-08 21:14:44 -07:00
watchdog
xen
zorro
Kconfig
Makefile