kernel-hacking-2024-linux-s.../drivers
NeilBrown 4b80991c6c md: Protect access to mddev->disks list using RCU
All modifications and most access to the mddev->disks list are made
under the reconfig_mutex lock.  However there are three places where
the list is walked without any locking.  If a reconfig happens at this
time, havoc (and oops) can ensue.

So use RCU to protect these accesses:
  - wrap them in rcu_read_{,un}lock()
  - use list_for_each_entry_rcu
  - add to the list with list_add_rcu
  - delete from the list with list_del_rcu
  - delay the 'free' with call_rcu rather than schedule_work

Note that export_rdev did a list_del_init on this list.  In almost all
cases the entry was not in the list anymore so it was a no-op and so
safe.  It is no longer safe as after list_del_rcu we may not touch
the list_head.
An audit shows that export_rdev is called:
  - after unbind_rdev_from_array, in which case the delete has
     already been done,
  - after bind_rdev_to_array fails, in which case the delete isn't needed.
  - before the device has been put on a list at all (e.g. in
      add_new_disk where reading the superblock fails).
  - and in autorun devices after a failure when the device is on a
      different list.

So remove the list_del_init call from export_rdev, and add it back
immediately before the called to export_rdev for that last case.

Note also that ->same_set is sometimes used for lists other than
mddev->list (e.g. candidates).  In these cases rcu is not needed.

Signed-off-by: NeilBrown <neilb@suse.de>
2008-07-21 17:05:25 +10:00
..
accessibility
acorn/char
acpi x86 ACPI: normalize segment descriptor register on resume 2008-07-05 08:25:40 +02:00
amba
ata ahci: give another shot at clearing all bits in irq_stat 2008-07-05 13:05:37 -07:00
atm atm: [he] send idle cells instead of unassigned when in SDH mode 2008-06-16 17:21:27 -07:00
auxdisplay Miguel Ojeda has moved 2008-07-04 10:40:05 -07:00
base mm: switch node meminfo Active & Inactive pages to Kbytes 2008-07-04 10:40:09 -07:00
block cciss: read config to obtain max outstanding commands per controller 2008-07-04 10:40:09 -07:00
bluetooth
cdrom
char tty: Fix inverted logic in send_break 2008-07-02 19:21:48 -07:00
clocksource
connector CONNECTOR: add a proc entry to list connectors 2008-06-27 20:03:24 -07:00
cpufreq
cpuidle
crypto
dca
dio
dma
edac
eisa
firewire firewire: fw-sbp2: fix parsing of logical unit directories 2008-06-27 20:55:00 +02:00
firmware
gpio gpio: pca953x (i2c) handles max7310 too 2008-07-04 10:40:06 -07:00
hid
hwmon hdaps: add support for various newer Lenovo thinkpads 2008-07-04 10:40:06 -07:00
i2c I2C: S3C2410: Add MODULE_ALIAS() for s3c2440 device. 2008-07-01 14:30:38 +01:00
ide it8213: fix return value in it8213_init_one() 2008-07-08 19:27:23 +02:00
ieee1394 ieee1394: Kconfig menu touch-up 2008-06-19 00:12:36 +02:00
infiniband RDMA/cxgb3: Fix regression caused by class_device -> device conversion 2008-07-08 14:40:05 -07:00
input drivers/input/ff-core.c needs <linux/sched.h> 2008-07-02 18:40:08 -07:00
isdn
leds
lguest x86: fix NULL pointer deref in __switch_to 2008-06-20 13:26:18 +02:00
macintosh [POWERPC] Build fix for drivers/macintosh/mediabay.c 2008-06-16 15:00:47 +10:00
mca
md md: Protect access to mddev->disks list using RCU 2008-07-21 17:05:25 +10:00
media V4L/DVB (8178): uvc: Fix compilation breakage for the other drivers, if uvc is selected 2008-07-02 08:58:15 -03:00
memstick
message
mfd
misc
mmc pxamci: fix byte aligned DMA transfers 2008-07-06 10:37:40 -07:00
mtd
net tun: Persistent devices can get stuck in xoff state 2008-07-10 16:59:11 -07:00
nubus
of
oprofile
parisc
parport
pci pci: VT3336 can't do MSI either 2008-07-04 10:40:05 -07:00
pcmcia
pnp
power
ps3
rapidio
rtc rtc-x1205: Fix alarm set 2008-07-04 10:40:05 -07:00
s390
sbus
scsi [SCSI] esp: tidy up target reference counting 2008-06-25 12:36:13 -05:00
serial serial: fix serial_match_port() for dynamic major tty-device numbers 2008-07-04 10:40:04 -07:00
sh
sn
spi spi: fix the read path in spidev 2008-07-04 10:40:08 -07:00
ssb ssb-pcicore: Fix IRQ-vector init on embedded devices 2008-07-07 15:31:40 -04:00
tc
telephony
thermal thermal: Create CONFIG_THERMAL_HWMON=n 2008-06-25 19:25:42 -04:00
uio
usb Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
video Fix broken fix for fsl-diu-db 2008-07-08 12:51:08 -07:00
virtio virtio: Complete feature negotation before updating status 2008-06-15 13:46:16 -07:00
w1
watchdog Revert "[WATCHDOG] hpwdt: Add CFLAGS to get driver working" 2008-06-24 13:09:26 +00:00
xen xen: Use wmb instead of rmb in xen_evtchn_do_upcall(). 2008-06-20 14:56:30 +02:00
zorro
Kconfig
Makefile