diff options
Diffstat (limited to 'drivers/scsi/libfc/fc_fcp.c')
| -rw-r--r-- | drivers/scsi/libfc/fc_fcp.c | 16 | 
1 files changed, 6 insertions, 10 deletions
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c index 2a3a4720a77..9cd2149519a 100644 --- a/drivers/scsi/libfc/fc_fcp.c +++ b/drivers/scsi/libfc/fc_fcp.c @@ -312,7 +312,7 @@ void fc_fcp_ddp_setup(struct fc_fcp_pkt *fsp, u16 xid)   *		       DDP related resources for a fcp_pkt   * @fsp: The FCP packet that DDP had been used on   */ -static void fc_fcp_ddp_done(struct fc_fcp_pkt *fsp) +void fc_fcp_ddp_done(struct fc_fcp_pkt *fsp)  {  	struct fc_lport *lport; @@ -681,8 +681,7 @@ static int fc_fcp_send_data(struct fc_fcp_pkt *fsp, struct fc_seq *seq,  		error = lport->tt.seq_send(lport, seq, fp);  		if (error) {  			WARN_ON(1);		/* send error should be rare */ -			fc_fcp_retry_cmd(fsp); -			return 0; +			return error;  		}  		fp = NULL;  	} @@ -1673,7 +1672,8 @@ static void fc_fcp_srr(struct fc_fcp_pkt *fsp, enum fc_rctl r_ctl, u32 offset)  		       FC_FCTL_REQ, 0);  	rec_tov = get_fsp_rec_tov(fsp); -	seq = lport->tt.exch_seq_send(lport, fp, fc_fcp_srr_resp, NULL, +	seq = lport->tt.exch_seq_send(lport, fp, fc_fcp_srr_resp, +				      fc_fcp_pkt_destroy,  				      fsp, jiffies_to_msecs(rec_tov));  	if (!seq)  		goto retry; @@ -1720,7 +1720,6 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)  		return;  	} -	fsp->recov_seq = NULL;  	switch (fc_frame_payload_op(fp)) {  	case ELS_LS_ACC:  		fsp->recov_retry = 0; @@ -1732,10 +1731,9 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)  		break;  	}  	fc_fcp_unlock_pkt(fsp); -	fsp->lp->tt.exch_done(seq);  out: +	fsp->lp->tt.exch_done(seq);  	fc_frame_free(fp); -	fc_fcp_pkt_release(fsp);	/* drop hold for outstanding SRR */  }  /** @@ -1747,8 +1745,6 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)  {  	if (fc_fcp_lock_pkt(fsp))  		goto out; -	fsp->lp->tt.exch_done(fsp->recov_seq); -	fsp->recov_seq = NULL;  	switch (PTR_ERR(fp)) {  	case -FC_EX_TIMEOUT:  		if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) @@ -1764,7 +1760,7 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)  	}  	fc_fcp_unlock_pkt(fsp);  out: -	fc_fcp_pkt_release(fsp);	/* drop hold for outstanding SRR */ +	fsp->lp->tt.exch_done(fsp->recov_seq);  }  /**  |