[SCSI] libfc: always initialize the FCoE DDP exchange id for fsp as FC_XID_UNKNOWN
authorYi Zou <yi.zou@intel.com>
Sat, 29 Jan 2011 00:03:15 +0000 (16:03 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Sat, 12 Feb 2011 16:56:53 +0000 (10:56 -0600)
The fsp's xfer_ddp is used as indication of the exchange id for the DDPed
I/O. We should always initialize it as FC_XID_UNKNOWN for a newly allocated
fsp, otherwise the fsp allocated in fc_fcp, i.e., not from queuecommand like
LUN RESET that is not doing DDP may still think DDP is setup for it since xid
0 is valid and goes on to call fc_fcp_ddp_done() in fc_fcp_resp() from
fc_tm_done(). So, set xfer_ddp as FC_XID_UNKNOWN in fc_fcp_pkt_alloc() now.

Also removes the setting of fsp->lp as it's already done when fsp is allocated.

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 5962d1a..21a64d4 100644 (file)
@@ -155,6 +155,7 @@ static struct fc_fcp_pkt *fc_fcp_pkt_alloc(struct fc_lport *lport, gfp_t gfp)
        if (fsp) {
                memset(fsp, 0, sizeof(*fsp));
                fsp->lp = lport;
+               fsp->xfer_ddp = FC_XID_UNKNOWN;
                atomic_set(&fsp->ref_cnt, 1);
                init_timer(&fsp->timer);
                INIT_LIST_HEAD(&fsp->list);
@@ -1842,9 +1843,7 @@ static int fc_queuecommand_lck(struct scsi_cmnd *sc_cmd, void (*done)(struct scs
         * build the libfc request pkt
         */
        fsp->cmd = sc_cmd;      /* save the cmd */
-       fsp->lp = lport;        /* save the softc ptr */
        fsp->rport = rport;     /* set the remote port ptr */
-       fsp->xfer_ddp = FC_XID_UNKNOWN;
        sc_cmd->scsi_done = done;
 
        /*
@@ -2112,7 +2111,6 @@ int fc_eh_device_reset(struct scsi_cmnd *sc_cmd)
         * the sc passed in is not setup for execution like when sent
         * through the queuecommand callout.
         */
-       fsp->lp = lport;        /* save the softc ptr */
        fsp->rport = rport;     /* set the remote port ptr */
 
        /*