linux-stable/drivers/block
Tejun Heo e71bf0d0ee block: fix disk->part[] dereferencing race
disk->part[] is protected by its matching bdev's lock.  However,
non-critical accesses like collecting stats and printing out sysfs and
proc information used to be performed without any locking.  As
partitions can come and go dynamically, partitions can go away
underneath those non-critical accesses.  As some of those accesses are
writes, this theoretically can lead to silent corruption.

This patch fixes the race by using RCU for the partition array and dev
reference counter to hold partitions.

* Rename disk->part[] to disk->__part[] to make sure no one outside
  genhd layer proper accesses it directly.

* Use RCU for disk->__part[] dereferencing.

* Implement disk_{get|put}_part() which can be used to get and put
  partitions from gendisk respectively.

* Iterators are implemented to help iterate through all partitions
  safely.

* Functions which require RCU readlock are marked with _rcu suffix.

* Use disk_put_part() in __blkdev_put() instead of directly putting
  the contained kobject.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2008-10-09 08:56:06 +02:00
..
aoe block: fix disk->part[] dereferencing race 2008-10-09 08:56:06 +02:00
paride device create: block: convert device_create to device_create_drvdata 2008-07-21 21:54:41 -07:00
amiflop.c m68k: Return -ENODEV if no device is found 2008-05-18 13:28:50 -07:00
ataflop.c m68k: Return -ENODEV if no device is found 2008-07-20 17:24:38 -07:00
brd.c brd: fix name argument of unregister_blkdev() 2008-08-20 15:40:30 -07:00
cciss.c cciss: fix bug if scsi tape support is disabled 2008-08-06 12:30:04 +02:00
cciss.h cciss: make rebuild_lun_table behave better 2008-08-06 12:30:03 +02:00
cciss_cmd.h
cciss_scsi.c cciss: add support for multi lun tape devices 2008-08-06 12:30:04 +02:00
cciss_scsi.h cciss: update copyright notices 2007-10-29 11:33:05 +01:00
cpqarray.c proc: remove proc_root_driver 2008-04-29 08:06:18 -07:00
cpqarray.h
cryptoloop.c drivers: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:16:32 -04:00
DAC960.c DAC960: push down BKL 2008-07-04 09:52:13 +02:00
DAC960.h
floppy.c drivers/block/floppy.c: replace init_module&cleanup_module with module_init&module_exit 2008-04-29 08:06:03 -07:00
hd.c hd.c: remove the #include <linux/mc146818rtc.h> 2008-07-16 20:33:48 +02:00
ida_cmd.h
ida_ioctl.h
Kconfig update the BLK_DEV_HD help text 2008-07-16 20:33:47 +02:00
loop.c block: make queue flags non-atomic 2008-04-29 14:48:33 +02:00
Makefile move ide/legacy/hd.c to drivers/block/ 2008-07-16 20:33:47 +02:00
nbd.c nbd: fix memory leak of nbd_dev array 2008-08-20 15:40:30 -07:00
pktcdvd.c block: don't depend on consecutive minor space 2008-10-09 08:56:05 +02:00
ps3disk.c block: don't depend on consecutive minor space 2008-10-09 08:56:05 +02:00
smart1,2.h
sunvdc.c block/sunvdc.c:print_version() must be __devinit 2008-02-01 09:26:32 +01:00
swim3.c Fix compile of swim3 as module 2008-02-14 20:58:04 -08:00
sx8.c block: replace remaining __FUNCTION__ occurrences 2008-04-21 09:51:04 +02:00
ub.c ub: Cosmetics 2008-05-02 10:25:52 -07:00
umem.c Cleanup umem driver: fix most checkpatch warnings, conform to kernel 2007-12-18 08:29:28 +01:00
umem.h
viodasd.c [POWERPC] iSeries: Remove unused mail address 2008-05-23 16:45:04 +10:00
virtio_blk.c virtio_blk: use a wrapper function to access io context information of IO requests 2008-10-09 08:56:02 +02:00
xd.c
xd.h
xen-blkfront.c xen-blkfront.c: make blkif_ioctl() static 2008-08-06 12:30:04 +02:00
xsysace.c [POWERPC] Xilinx: Update compatible to use values generated by BSP generator. 2008-02-06 10:23:21 -07:00
z2ram.c m68k: Return -ENODEV if no device is found 2008-05-18 13:28:50 -07:00