diff options
| -rw-r--r-- | drivers/scsi/bfa/bfad_im.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c index cee3d89d1412..fb7aefaba129 100644 --- a/drivers/scsi/bfa/bfad_im.c +++ b/drivers/scsi/bfa/bfad_im.c | |||
| @@ -43,11 +43,11 @@ bfa_cb_ioim_done(void *drv, struct bfad_ioim_s *dio, | |||
| 43 | struct bfad_s *bfad = drv; | 43 | struct bfad_s *bfad = drv; |
| 44 | struct bfad_itnim_data_s *itnim_data; | 44 | struct bfad_itnim_data_s *itnim_data; |
| 45 | struct bfad_itnim_s *itnim; | 45 | struct bfad_itnim_s *itnim; |
| 46 | u8 host_status = DID_OK; | ||
| 46 | 47 | ||
| 47 | switch (io_status) { | 48 | switch (io_status) { |
| 48 | case BFI_IOIM_STS_OK: | 49 | case BFI_IOIM_STS_OK: |
| 49 | bfa_trc(bfad, scsi_status); | 50 | bfa_trc(bfad, scsi_status); |
| 50 | cmnd->result = ScsiResult(DID_OK, scsi_status); | ||
| 51 | scsi_set_resid(cmnd, 0); | 51 | scsi_set_resid(cmnd, 0); |
| 52 | 52 | ||
| 53 | if (sns_len > 0) { | 53 | if (sns_len > 0) { |
| @@ -56,8 +56,18 @@ bfa_cb_ioim_done(void *drv, struct bfad_ioim_s *dio, | |||
| 56 | sns_len = SCSI_SENSE_BUFFERSIZE; | 56 | sns_len = SCSI_SENSE_BUFFERSIZE; |
| 57 | memcpy(cmnd->sense_buffer, sns_info, sns_len); | 57 | memcpy(cmnd->sense_buffer, sns_info, sns_len); |
| 58 | } | 58 | } |
| 59 | if (residue > 0) | 59 | if (residue > 0) { |
| 60 | bfa_trc(bfad, residue); | ||
| 60 | scsi_set_resid(cmnd, residue); | 61 | scsi_set_resid(cmnd, residue); |
| 62 | if (!sns_len && (scsi_status == SAM_STAT_GOOD) && | ||
| 63 | (scsi_bufflen(cmnd) - residue) < | ||
| 64 | cmnd->underflow) { | ||
| 65 | bfa_trc(bfad, 0); | ||
| 66 | host_status = DID_ERROR; | ||
| 67 | } | ||
| 68 | } | ||
| 69 | cmnd->result = ScsiResult(host_status, scsi_status); | ||
| 70 | |||
| 61 | break; | 71 | break; |
| 62 | 72 | ||
| 63 | case BFI_IOIM_STS_ABORTED: | 73 | case BFI_IOIM_STS_ABORTED: |
