|
@@ -838,10 +838,17 @@ static int scsi_setup_flush_cmnd(struct scsi_device *sdp, struct request *rq)
|
|
|
|
|
|
static void sd_unprep_fn(struct request_queue *q, struct request *rq)
|
|
|
{
|
|
|
+ struct scsi_cmnd *SCpnt = rq->special;
|
|
|
+
|
|
|
if (rq->cmd_flags & REQ_DISCARD) {
|
|
|
free_page((unsigned long)rq->buffer);
|
|
|
rq->buffer = NULL;
|
|
|
}
|
|
|
+ if (SCpnt->cmnd != rq->cmd) {
|
|
|
+ mempool_free(SCpnt->cmnd, sd_cdb_pool);
|
|
|
+ SCpnt->cmnd = NULL;
|
|
|
+ SCpnt->cmd_len = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1720,21 +1727,6 @@ static int sd_done(struct scsi_cmnd *SCpnt)
|
|
|
if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
|
|
|
sd_dif_complete(SCpnt, good_bytes);
|
|
|
|
|
|
- if (scsi_host_dif_capable(sdkp->device->host, sdkp->protection_type)
|
|
|
- == SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd) {
|
|
|
-
|
|
|
- /* We have to print a failed command here as the
|
|
|
- * extended CDB gets freed before scsi_io_completion()
|
|
|
- * is called.
|
|
|
- */
|
|
|
- if (result)
|
|
|
- scsi_print_command(SCpnt);
|
|
|
-
|
|
|
- mempool_free(SCpnt->cmnd, sd_cdb_pool);
|
|
|
- SCpnt->cmnd = NULL;
|
|
|
- SCpnt->cmd_len = 0;
|
|
|
- }
|
|
|
-
|
|
|
return good_bytes;
|
|
|
}
|
|
|
|