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 | ||
