Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI fixes from James Bottomley: "This is a rather large set of fixes. The bulk are for lpfc correcting a lot of issues in the new NVME driver code which just went in in the merge window. The others are: - fix a hang in the vmware paravirt driver caused by incorrect handling of the new MSI vector allocation - long standing bug in storvsc, which recent block changes turned from being a harmless annoyance into a hang - yet more fallout (in mpt3sas) from the changes to device blocking The remainder are small fixes and updates" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (34 commits) scsi: lpfc: Add shutdown method for kexec scsi: storvsc: Workaround for virtual DVD SCSI version scsi: lpfc: revise version number to 11.2.0.10 scsi: lpfc: code cleanups in NVME initiator discovery scsi: lpfc: code cleanups in NVME initiator base scsi: lpfc: correct rdp diag portnames scsi: lpfc: remove dead sli3 nvme code scsi: lpfc: correct double print scsi: lpfc: Rename LPFC_MAX_EQ_DELAY to LPFC_MAX_EQ_DELAY_EQID_CNT scsi: lpfc: Rework lpfc Kconfig for NVME options scsi: lpfc: add transport eh_timed_out reference scsi: lpfc: Fix eh_deadline setting for sli3 adapters. scsi: lpfc: add NVME exchange aborts scsi: lpfc: Fix nvme allocation bug on failed nvme_fc_register_localport scsi: lpfc: Fix IO submission if WQ is full scsi: lpfc: Fix NVME CMD IU byte swapped word 1 problem scsi: lpfc: Fix RCTL value on NVME LS request and response scsi: lpfc: Fix crash during Hardware error recovery on SLI3 adapters scsi: lpfc: fix missing spin_unlock on sql_list_lock scsi: lpfc: don't dereference dma_buf->iocbq before null check ...
Este cometimento está contido em:
@@ -1783,6 +1783,8 @@ static int sd_done(struct scsi_cmnd *SCpnt)
|
||||
{
|
||||
int result = SCpnt->result;
|
||||
unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
|
||||
unsigned int sector_size = SCpnt->device->sector_size;
|
||||
unsigned int resid;
|
||||
struct scsi_sense_hdr sshdr;
|
||||
struct scsi_disk *sdkp = scsi_disk(SCpnt->request->rq_disk);
|
||||
struct request *req = SCpnt->request;
|
||||
@@ -1813,6 +1815,21 @@ static int sd_done(struct scsi_cmnd *SCpnt)
|
||||
scsi_set_resid(SCpnt, blk_rq_bytes(req));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* In case of bogus fw or device, we could end up having
|
||||
* an unaligned partial completion. Check this here and force
|
||||
* alignment.
|
||||
*/
|
||||
resid = scsi_get_resid(SCpnt);
|
||||
if (resid & (sector_size - 1)) {
|
||||
sd_printk(KERN_INFO, sdkp,
|
||||
"Unaligned partial completion (resid=%u, sector_sz=%u)\n",
|
||||
resid, sector_size);
|
||||
resid = min(scsi_bufflen(SCpnt),
|
||||
round_up(resid, sector_size));
|
||||
scsi_set_resid(SCpnt, resid);
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador