diff options
Diffstat (limited to 'drivers/scsi/sd.c')
-rw-r--r-- | drivers/scsi/sd.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 80f39b8b0223..86fcf2c313ad 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -838,10 +838,17 @@ static int scsi_setup_flush_cmnd(struct scsi_device *sdp, struct request *rq) | |||
838 | 838 | ||
839 | static void sd_unprep_fn(struct request_queue *q, struct request *rq) | 839 | static void sd_unprep_fn(struct request_queue *q, struct request *rq) |
840 | { | 840 | { |
841 | struct scsi_cmnd *SCpnt = rq->special; | ||
842 | |||
841 | if (rq->cmd_flags & REQ_DISCARD) { | 843 | if (rq->cmd_flags & REQ_DISCARD) { |
842 | free_page((unsigned long)rq->buffer); | 844 | free_page((unsigned long)rq->buffer); |
843 | rq->buffer = NULL; | 845 | rq->buffer = NULL; |
844 | } | 846 | } |
847 | if (SCpnt->cmnd != rq->cmd) { | ||
848 | mempool_free(SCpnt->cmnd, sd_cdb_pool); | ||
849 | SCpnt->cmnd = NULL; | ||
850 | SCpnt->cmd_len = 0; | ||
851 | } | ||
845 | } | 852 | } |
846 | 853 | ||
847 | /** | 854 | /** |
@@ -1720,21 +1727,6 @@ static int sd_done(struct scsi_cmnd *SCpnt) | |||
1720 | if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt)) | 1727 | if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt)) |
1721 | sd_dif_complete(SCpnt, good_bytes); | 1728 | sd_dif_complete(SCpnt, good_bytes); |
1722 | 1729 | ||
1723 | if (scsi_host_dif_capable(sdkp->device->host, sdkp->protection_type) | ||
1724 | == SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd) { | ||
1725 | |||
1726 | /* We have to print a failed command here as the | ||
1727 | * extended CDB gets freed before scsi_io_completion() | ||
1728 | * is called. | ||
1729 | */ | ||
1730 | if (result) | ||
1731 | scsi_print_command(SCpnt); | ||
1732 | |||
1733 | mempool_free(SCpnt->cmnd, sd_cdb_pool); | ||
1734 | SCpnt->cmnd = NULL; | ||
1735 | SCpnt->cmd_len = 0; | ||
1736 | } | ||
1737 | |||
1738 | return good_bytes; | 1730 | return good_bytes; |
1739 | } | 1731 | } |
1740 | 1732 | ||