Commit 2c4cffe8 authored by Paolo Bonzini's avatar Paolo Bonzini Committed by Jens Axboe

block: fix bogus EFAULT error from SG_IO ioctl

Whenever blk_fill_sghdr_rq fails, its errno code is ignored and changed to
EFAULT.  This can cause very confusing errors:

  $ sg_persist -k /dev/sda
  persistent reservation in: pass through os error: Bad address

The fix is trivial, just propagate the return value from
blk_fill_sghdr_rq.
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Acked-by: default avatarJeff Moyer <jmoyer@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 3399a3f7
...@@ -326,8 +326,8 @@ static int sg_io(struct request_queue *q, struct gendisk *bd_disk, ...@@ -326,8 +326,8 @@ static int sg_io(struct request_queue *q, struct gendisk *bd_disk,
goto out_put_request; goto out_put_request;
} }
ret = -EFAULT; ret = blk_fill_sghdr_rq(q, rq, hdr, mode);
if (blk_fill_sghdr_rq(q, rq, hdr, mode)) if (ret < 0)
goto out_free_cdb; goto out_free_cdb;
ret = 0; ret = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment