scsi: use blk_rq_payload_bytes
authorChristoph Hellwig <hch@lst.de>
Fri, 13 Jan 2017 11:29:11 +0000 (12:29 +0100)
committerJens Axboe <axboe@fb.com>
Fri, 13 Jan 2017 22:17:04 +0000 (15:17 -0700)
Without that we'll pass a wrong payload size in cmd->sdb, which
can lead to hangs with drivers that need the total transfer size.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reported-by: Chris Valean <v-chvale@microsoft.com>
Reported-by: Dexuan Cui <decui@microsoft.com>
Fixes: f9d03f96 ("block: improve handling of the magic discard payload")
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/scsi/scsi_lib.c

index c35b6de4ca643297d1908341421c865c2cb93e84..ad4ff8fcd4ddccd744954869ad4663e5e4dccfb3 100644 (file)
@@ -1018,7 +1018,7 @@ static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb)
        count = blk_rq_map_sg(req->q, req, sdb->table.sgl);
        BUG_ON(count > sdb->table.nents);
        sdb->table.nents = count;
-       sdb->length = blk_rq_bytes(req);
+       sdb->length = blk_rq_payload_bytes(req);
        return BLKPREP_OK;
 }