Joe Lawrence 2b5bebccd2 [SCSI] st: Take additional queue ref in st_probe
This patch fixes a reference count bug in the SCSI tape driver which can be
reproduced with the following:

* Boot with slub_debug=FZPU, tape drive attached
* echo 1 > /sys/devices/... tape device pci path .../remove
* Wait for device removal
* echo 1 > /sys/kernel/slab/blkdev_queue/validate
* Slub debug complains about corrupted poison pattern

In commit 523e1d39 (block: make gendisk hold a reference to its queue)
add_disk() and disk_release() were modified to get/put an additional
reference on a disk queue to fix a reference counting discrepency
between bdev release and SCSI device removal.  The ST driver never
calls add_disk(), so this commit introduced an extra kref put when the
ST driver frees its struct gendisk.

Attempts were made to fix this bug at the block level [1] but later
abandoned due to floppy driver issues [2].

[1] https://lkml.org/lkml/2012/8/27/354
[2] https://lkml.org/lkml/2012/9/22/113

Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com>
Tested-by: Ewan D. Milne <emilne@redhat.com>
Acked-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
2013-04-06 11:14:20 +01:00
..
2011-03-31 11:26:23 -03:00
2013-02-28 12:43:43 -08:00
2013-02-28 12:43:43 -08:00
2011-07-26 16:49:47 -07:00
2013-03-25 16:04:22 -07:00
2013-02-22 17:32:07 +00:00
2013-03-02 11:42:16 -08:00
2013-03-02 11:42:16 -08:00
2013-02-22 23:31:31 -05:00
2011-03-31 11:26:23 -03:00
2013-02-22 23:31:31 -05:00
2013-02-22 23:31:31 -05:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2013-02-27 19:10:18 -08:00
2011-03-31 11:26:23 -03:00
2013-02-22 23:31:31 -05:00
2010-11-16 13:33:23 -08:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2011-05-01 10:22:40 -05:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2013-01-29 13:55:06 +11:00
2012-09-01 08:43:34 -07:00
2011-03-31 11:26:23 -03:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2013-01-03 15:57:01 -08:00
2011-03-31 11:26:23 -03:00
2012-03-22 12:55:29 -07:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2011-03-31 11:26:23 -03:00
2012-03-28 18:30:03 +01:00
2011-03-31 11:26:23 -03:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2012-02-21 11:40:37 +01:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2013-02-28 12:43:43 -08:00
2012-11-13 21:11:31 -08:00
2012-01-03 22:54:07 -05:00
2013-02-27 19:10:18 -08:00
2012-09-14 17:59:29 +01:00
2013-03-02 11:42:16 -08:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2012-03-28 18:30:03 +01:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00
2010-11-16 13:33:23 -08:00