[SCSI] fix locking in host use of blk_plug_device()
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 3 Jul 2008 16:31:55 +0000 (11:31 -0500)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Sat, 12 Jul 2008 13:22:36 +0000 (08:22 -0500)
scsi_lib.c:scsi_host_queue_ready() plugs the device with incorrect
locking.  It should actually have the queue lock held, but it's
holding the host lock.  Fix this by eliminating the call.  The host
ready has no need to plug the queue because if it returns 0 in
scsi_request_function control transfers to not_ready which acquires
the queue lock and plugs the device if its at zero depth.

Reported-by: Elias Oltmanns <eo@nebensachen.de>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/scsi_lib.c

index aa8d5de58839725c1803fa439af31797283b391d..0451903452e6d950b87fa813855b49ca2d01db4c 100644 (file)
@@ -1328,7 +1328,6 @@ static inline int scsi_host_queue_ready(struct request_queue *q,
                                printk("scsi%d unblocking host at zero depth\n",
                                        shost->host_no));
                } else {
-                       blk_plug_device(q);
                        return 0;
                }
        }