]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/scsi_lib.c
[SCSI] scsi_dh: attach to hardware handler from dm-mpath
[linux-2.6-omap-h63xx.git] / drivers / scsi / scsi_lib.c
index 88d1b5f44e59f2847bfca483a035b686e57de051..fe77ccacf31934df747827c138056e1f68c11611 100644 (file)
@@ -1497,6 +1497,21 @@ static void scsi_request_fn(struct request_queue *q)
                }
                spin_lock(shost->host_lock);
 
+               /*
+                * We hit this when the driver is using a host wide
+                * tag map. For device level tag maps the queue_depth check
+                * in the device ready fn would prevent us from trying
+                * to allocate a tag. Since the map is a shared host resource
+                * we add the dev to the starved list so it eventually gets
+                * a run when a tag is freed.
+                */
+               if (blk_queue_tagged(q) && (req->tag == -1)) {
+                       if (list_empty(&sdev->starved_entry))
+                               list_add_tail(&sdev->starved_entry,
+                                             &shost->starved_list);
+                       goto not_ready;
+               }
+
                if (!scsi_host_queue_ready(q, shost, sdev))
                        goto not_ready;
                if (scsi_target(sdev)->single_lun) {