[kernel/f15] [SCSI] Fix oops caused by queue refcounting failure
Dave Jones
davej at fedoraproject.org
Tue Jun 7 19:26:55 UTC 2011
commit 0b2fda5000b7294349276db6e09f0ba4dd92bf4e
Author: Dave Jones <davej at redhat.com>
Date: Tue Jun 7 15:25:58 2011 -0400
[SCSI] Fix oops caused by queue refcounting failure
block-queue-refcount.patch | 43 +++++++++++++++++++++++++++++++++++++++++++
kernel.spec | 6 ++++++
2 files changed, 49 insertions(+), 0 deletions(-)
---
diff --git a/block-queue-refcount.patch b/block-queue-refcount.patch
new file mode 100644
index 0000000..d53dd1b
--- /dev/null
+++ b/block-queue-refcount.patch
@@ -0,0 +1,43 @@
+commit e73e079bf128d68284efedeba1fbbc18d78610f9
+Author: James Bottomley <James.Bottomley at HansenPartnership.com>
+Date: Wed May 25 15:52:14 2011 -0500
+
+ [SCSI] Fix oops caused by queue refcounting failure
+
+ In certain circumstances, we can get an oops from a torn down device.
+ Most notably this is from CD roms trying to call scsi_ioctl. The root
+ cause of the problem is the fact that after scsi_remove_device() has
+ been called, the queue is fully torn down. This is actually wrong
+ since the queue can be used until the sdev release function is called.
+ Therefore, we add an extra reference to the queue which is released in
+ sdev->release, so the queue always exists.
+
+ Reported-by: Parag Warudkar <parag.lkml at gmail.com>
+ Cc: stable at kernel.org
+ Signed-off-by: James Bottomley <jbottomley at parallels.com>
+
+diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
+index 58584dc..44e8ca3 100644
+--- a/drivers/scsi/scsi_scan.c
++++ b/drivers/scsi/scsi_scan.c
+@@ -297,7 +297,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,
+ kfree(sdev);
+ goto out;
+ }
+-
++ blk_get_queue(sdev->request_queue);
+ sdev->request_queue->queuedata = sdev;
+ scsi_adjust_queue_depth(sdev, 0, sdev->host->cmd_per_lun);
+
+diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
+index e639125..e0bd3f7 100644
+--- a/drivers/scsi/scsi_sysfs.c
++++ b/drivers/scsi/scsi_sysfs.c
+@@ -322,6 +322,7 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
+ kfree(evt);
+ }
+
++ blk_put_queue(sdev->request_queue);
+ /* NULL queue means the device can't be used */
+ sdev->request_queue = NULL;
+
diff --git a/kernel.spec b/kernel.spec
index 204317d..06756f1 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -656,6 +656,8 @@ Patch530: linux-2.6-silence-fbcon-logo.patch
Patch570: linux-2.6-selinux-mprotect-checks.patch
Patch580: linux-2.6-sparc-selinux-mprotect-checks.patch
+Patch600: block-queue-refcount.patch
+
Patch610: hda_intel-prealloc-4mb-dmabuffer.patch
Patch700: linux-2.6-e1000-ich9-montevina.patch
@@ -1267,6 +1269,7 @@ ApplyPatch x86-pci-preserve-existing-pci-bfsort-whitelist-for-dell-systems.patch
#
# SCSI Bits.
#
+ApplyPatch block-queue-refcount.patch
# ACPI
@@ -1995,6 +1998,9 @@ fi
# and build.
%changelog
+* Tue Jun 07 2011 Dave Jones <davej at redhat.com>
+- [SCSI] Fix oops caused by queue refcounting failure.
+
* Sat Jun 04 2011 Chuck Ebbert <cebbert at redhat.com> 2.6.38.8-31
- Linux 2.6.38.8
- Revert radeon patches we already have:
More information about the scm-commits
mailing list