linux/drivers/block
Ed Cashin 7135a71b19 aoe: allocate unused request_queue for sysfs
Andy Whitcroft reported an oops in aoe triggered by use of an
incorrectly initialised request_queue object:

  [ 2645.959090] kobject '<NULL>' (ffff880059ca22c0): tried to add
		an uninitialized object, something is seriously wrong.
  [ 2645.959104] Pid: 6, comm: events/0 Not tainted 2.6.31-5-generic #24-Ubuntu
  [ 2645.959107] Call Trace:
  [ 2645.959139] [<ffffffff8126ca2f>] kobject_add+0x5f/0x70
  [ 2645.959151] [<ffffffff8125b4ab>] blk_register_queue+0x8b/0xf0
  [ 2645.959155] [<ffffffff8126043f>] add_disk+0x8f/0x160
  [ 2645.959161] [<ffffffffa01673c4>] aoeblk_gdalloc+0x164/0x1c0 [aoe]

The request queue of an aoe device is not used but can be allocated in
code that does not sleep.

Bruno bisected this regression down to

  cd43e26f07

  block: Expose stacked device queues in sysfs

"This seems to generate /sys/block/$device/queue and its contents for
 everyone who is using queues, not just for those queues that have a
 non-NULL queue->request_fn."

Addresses http://bugs.launchpad.net/bugs/410198
Addresses http://bugzilla.kernel.org/show_bug.cgi?id=13942

Note that embedding a queue inside another object has always been
an illegal construct, since the queues are reference counted and
must persist until the last reference is dropped. So aoe was
always buggy in this respect (Jens).

Signed-off-by: Ed Cashin <ecashin@coraid.com>
Cc: Andy Whitcroft <apw@canonical.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Bruno Premont <bonbons@linux-vserver.org>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
2009-09-09 14:10:18 +02:00
..
aoe aoe: allocate unused request_queue for sysfs 2009-09-09 14:10:18 +02:00
paride block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
DAC960.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
DAC960.h Fix DAC960 driver on machines which don't support 64-bit DMA 2007-09-11 17:21:19 -07:00
Kconfig osdblk: a Linux block device for OSD objects 2009-06-24 12:25:02 +03:00
Makefile osdblk: a Linux block device for OSD objects 2009-06-24 12:25:02 +03:00
amiflop.c Remove multiple KERN_ prefixes from printk formats 2009-07-08 10:30:03 -07:00
ataflop.c ataflop: adjust NULL test 2009-07-17 15:29:58 +09:00
brd.c ramdisk: remove long-deprecated "ramdisk=" boot-time parameter 2009-06-10 23:07:15 +02:00
cciss.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
cciss.h cciss: Remove no longer needed sendcmd reject processing code 2009-06-09 05:47:43 +02:00
cciss_cmd.h cciss: Ignore stale commands after reboot 2009-07-03 21:06:45 +02:00
cciss_scsi.c cciss: decode unit attention in SCSI error handling code 2009-06-09 05:47:44 +02:00
cciss_scsi.h cciss: Fix cciss SCSI rescan code to better notice device changes 2008-10-09 08:56:18 +02:00
cpqarray.c block: Do away with the notion of hardsect_size 2009-05-22 23:22:54 +02:00
cpqarray.h
cryptoloop.c drivers: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:16:32 -04:00
floppy.c floppy: fix lock imbalance 2009-06-30 18:56:01 -07:00
hd.c hd: stop defining MAJOR_NR 2009-06-18 09:56:20 +02:00
ida_cmd.h
ida_ioctl.h
loop.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
mg_disk.c mg_disk: Add missing ready status check on mg_write() 2009-07-28 08:57:33 +02:00
nbd.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
osdblk.c osdblk: Adjust queue limits to lower device's limits 2009-06-24 12:27:01 +03:00
pktcdvd.c Fix congestion_wait() sync/async vs read/write confusion 2009-07-10 20:31:53 +02:00
ps3disk.c block/ps3: remove driver_data direct access of struct device 2009-06-15 21:30:28 -07:00
ps3vram.c block/ps3: remove driver_data direct access of struct device 2009-06-15 21:30:28 -07:00
smart1,2.h
sunvdc.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
swim.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
swim3.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
swim_asm.S m68k: mac - Add SWIM floppy support 2009-03-26 21:15:27 +01:00
sx8.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
ub.c block: Do away with the notion of hardsect_size 2009-05-22 23:22:54 +02:00
umem.c umem: fix request_queue lock warning 2009-04-24 08:54:21 +02:00
umem.h drivers/block/umem: trim trailing whitespace 2007-10-10 09:25:59 +02:00
viodasd.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
virtio_blk.c Merge branch 'tj-block-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc 2009-07-22 10:06:33 -07:00
xd.c block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
xd.h [PATCH] switch xd 2008-10-21 07:48:11 -04:00
xen-blkfront.c xen block: remove driver_data direct access of struct device 2009-06-15 21:30:27 -07:00
xsysace.c Remove multiple KERN_ prefixes from printk formats 2009-07-08 10:30:03 -07:00
z2ram.c z2ram: Small cleanup for z2ram.c 2009-07-15 11:27:40 +09:00