sd/skd: stuff discard page in request->completion_data
[deliverable/linux.git] / drivers / scsi / sd.c
index 06d154d20faa087480e60f52d10fe7558e5421b8..96af195224f2b9dae866ea109afb1d894c142c80 100644 (file)
@@ -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;
This page took 0.030138 seconds and 5 git commands to generate.