diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c index 882904c1e..6a32a3189 100644 --- a/scst/src/dev_handlers/scst_vdisk.c +++ b/scst/src/dev_handlers/scst_vdisk.c @@ -1091,7 +1091,9 @@ check: if (virt_dev->unmap_opt_gran == virt_dev->unmap_align) virt_dev->unmap_align = 0; virt_dev->unmap_max_lba_cnt = q->limits.max_discard_sectors >> (block_shift - 9); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) virt_dev->discard_zeroes_data = q->limits.discard_zeroes_data; +#endif #else sBUG(); #endif diff --git a/scst/src/scst_lib.c b/scst/src/scst_lib.c index dbf5cdbd5..3da17c97f 100644 --- a/scst/src/scst_lib.c +++ b/scst/src/scst_lib.c @@ -8267,16 +8267,26 @@ static void scsi_end_async(struct request *req, int error) lockdep_assert_held(req->q->queue_lock); #endif - if (sioc->done) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) - sioc->done(sioc->data, sioc->sense, req->errors, - scsi_req(req)->resid_len); -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) - sioc->done(sioc->data, sioc->sense, req->errors, - req->resid_len); + if (sioc->done) { + int result, resid_len; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + result = scsi_req(req)->result; #else - sioc->done(sioc->data, sioc->sense, req->errors, req->data_len); + result = req->errors; #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + resid_len = scsi_req(req)->resid_len; +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) + resid_len = req->resid_len; +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) + sioc->done(sioc->data, sioc->sense, result, resid_len); +#else + sioc->done(sioc->data, sioc->sense, result, req->data_len); +#endif + } kmem_cache_free(scsi_io_context_cache, sioc); @@ -8365,7 +8375,11 @@ int scst_scsi_exec_async(struct scst_cmd *cmd, void *data, req->sense = sioc->sense; req->sense_len = sizeof(sioc->sense); rq->timeout = cmd->timeout; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) + req->retries = cmd->retries; +#else rq->retries = cmd->retries; +#endif rq->end_io_data = sioc; #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35) rq->cmd_flags |= REQ_FAILFAST_MASK;