[SCSI] libfc: don't exch_done() on invalid sequence ptr
authorYi Zou <yi.zou@intel.com>
Fri, 6 Jul 2012 17:40:26 +0000 (10:40 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 20 Jul 2012 07:58:56 +0000 (08:58 +0100)
The lport_recv(), i.e., fc_lport_recv_req() may get called w/o the sequence ptr
being set in fr_seq(), particularly in the case of vn2vn mode, this may happen
if the passive fcp provider, e.g., tcm_fc, has not been registered yet.

Signed-off-by: Yi Zou <yi.zou@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/libfc/fc_lport.c

index ca278d4b0f66854ebbb24c6e79e48e235afa892c..d385d1147889856899a2a5a94248f95f4b71b5f9 100644 (file)
@@ -980,7 +980,8 @@ drop:
        rcu_read_unlock();
        FC_LPORT_DBG(lport, "dropping unexpected frame type %x\n", fh->fh_type);
        fc_frame_free(fp);
-       lport->tt.exch_done(sp);
+       if (sp)
+               lport->tt.exch_done(sp);
 }
 
 /**