[SCSI] libfc: do not fc_io_compl on fsp w/o any scsi_cmnd associated
authorYi Zou <yi.zou@intel.com>
Wed, 1 Dec 2010 00:19:20 +0000 (16:19 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Tue, 21 Dec 2010 18:24:25 +0000 (12:24 -0600)
Do not call fc_io_compl() on fsp w/o any scsi_cmnd, e.g., lun reset is built
inside fc_fcp, not from a scsi command from queuecommnd from scsi-ml, so in
in case target is buggy that is invalid flags in the FCP_RSP, as we have seen
in some SAN Blaze target where all bits in flags are 0, we do not want to call
io_compl on this fsp.

[ Comment block added by Robert Love ]

Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/libfc/fc_fcp.c

index a36c652edbba3505e7480a149a5386220283a8de..47c930a01454661c7373744c58d7114f6f99fcd5 100644 (file)
@@ -973,7 +973,13 @@ static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp)
                }
                lport->tt.exch_done(seq);
        }
-       fc_io_compl(fsp);
+       /*
+        * Some resets driven by SCSI are not I/Os and do not have
+        * SCSI commands associated with the requests. We should not
+        * call I/O completion if we do not have a SCSI command.
+        */
+       if (fsp->cmd)
+               fc_io_compl(fsp);
 }
 
 /**