diff options
Diffstat (limited to 'drivers/scsi/libfc/fc_fcp.c')
| -rw-r--r-- | drivers/scsi/libfc/fc_fcp.c | 10 | 
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c index 5fd0f1fbe58..1d7e76e8b44 100644 --- a/drivers/scsi/libfc/fc_fcp.c +++ b/drivers/scsi/libfc/fc_fcp.c @@ -902,7 +902,8 @@ static void fc_fcp_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp)  	/*  	 * Check for missing or extra data frames.  	 */ -	if (unlikely(fsp->xfer_len != expected_len)) { +	if (unlikely(fsp->cdb_status == SAM_STAT_GOOD && +		     fsp->xfer_len != expected_len)) {  		if (fsp->xfer_len < expected_len) {  			/*  			 * Some data may be queued locally, @@ -955,12 +956,11 @@ static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp)  		 * Test for transport underrun, independent of response  		 * underrun status.  		 */ -		if (fsp->xfer_len < fsp->data_len && !fsp->io_status && +		if (fsp->cdb_status == SAM_STAT_GOOD && +		    fsp->xfer_len < fsp->data_len && !fsp->io_status &&  		    (!(fsp->scsi_comp_flags & FCP_RESID_UNDER) || -		     fsp->xfer_len < fsp->data_len - fsp->scsi_resid)) { +		     fsp->xfer_len < fsp->data_len - fsp->scsi_resid))  			fsp->status_code = FC_DATA_UNDRUN; -			fsp->io_status = 0; -		}  	}  	seq = fsp->seq_ptr;  | 
