]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/scsi/sd.c
Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb...
[karo-tx-linux.git] / drivers / scsi / sd.c
index 321faf6030359604c1d918d8154eefcb7291af47..e9689d57ccb6cb558925b63091ff3a95accdef28 100644 (file)
@@ -741,16 +741,14 @@ 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->buffer = page_address(page);
        rq->__data_len = nr_bytes;
 
 out:
-       if (ret != BLKPREP_OK) {
+       if (ret != BLKPREP_OK)
                __free_page(page);
-               rq->buffer = NULL;
-       }
        return ret;
 }
 
@@ -846,10 +844,9 @@ static void sd_uninit_command(struct scsi_cmnd *SCpnt)
 {
        struct request *rq = SCpnt->request;
 
-       if (rq->cmd_flags & REQ_DISCARD) {
-               free_page((unsigned long)rq->buffer);
-               rq->buffer = NULL;
-       }
+       if (rq->cmd_flags & REQ_DISCARD)
+               __free_page(rq->completion_data);
+
        if (SCpnt->cmnd != rq->cmd) {
                mempool_free(SCpnt->cmnd, sd_cdb_pool);
                SCpnt->cmnd = NULL;