|
@@ -737,6 +737,7 @@ static int sd_setup_discard_cmnd(struct scsi_device *sdp, struct request *rq)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
+ rq->completion_data = page;
|
|
|
blk_add_request_payload(rq, page, len);
|
|
|
ret = scsi_setup_blk_pc_cmnd(sdp, rq);
|
|
|
rq->__data_len = nr_bytes;
|
|
@@ -839,11 +840,9 @@ static void sd_unprep_fn(struct request_queue *q, struct request *rq)
|
|
|
{
|
|
|
struct scsi_cmnd *SCpnt = rq->special;
|
|
|
|
|
|
- if (rq->cmd_flags & REQ_DISCARD) {
|
|
|
- struct bio *bio = rq->bio;
|
|
|
+ if (rq->cmd_flags & REQ_DISCARD)
|
|
|
+ __free_page(rq->completion_data);
|
|
|
|
|
|
- __free_page(bio->bi_io_vec->bv_page);
|
|
|
- }
|
|
|
if (SCpnt->cmnd != rq->cmd) {
|
|
|
mempool_free(SCpnt->cmnd, sd_cdb_pool);
|
|
|
SCpnt->cmnd = NULL;
|