mirror of https://gitee.com/openkylin/linux.git
nbd: set rq->errors to actual error code
We've been relying on the block layer to assume rq->errors being set translates into -EIO. I noticed in testing that sometimes this isn't true, and really there's not much of a reason to have a counter instead of just using -EIO. So set it properly so we don't leak random numbers to unsuspecting victims. Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
9dd5d3ab49
commit
c103b4dac8
|
@ -192,7 +192,7 @@ static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req,
|
||||||
|
|
||||||
dev_err(nbd_to_dev(nbd), "Connection timed out, shutting down connection\n");
|
dev_err(nbd_to_dev(nbd), "Connection timed out, shutting down connection\n");
|
||||||
set_bit(NBD_TIMEDOUT, &nbd->runtime_flags);
|
set_bit(NBD_TIMEDOUT, &nbd->runtime_flags);
|
||||||
req->errors++;
|
req->errors = -EIO;
|
||||||
|
|
||||||
mutex_lock(&nbd->config_lock);
|
mutex_lock(&nbd->config_lock);
|
||||||
sock_shutdown(nbd);
|
sock_shutdown(nbd);
|
||||||
|
@ -432,7 +432,7 @@ static struct nbd_cmd *nbd_read_stat(struct nbd_device *nbd, int index)
|
||||||
if (ntohl(reply.error)) {
|
if (ntohl(reply.error)) {
|
||||||
dev_err(disk_to_dev(nbd->disk), "Other side returned error (%d)\n",
|
dev_err(disk_to_dev(nbd->disk), "Other side returned error (%d)\n",
|
||||||
ntohl(reply.error));
|
ntohl(reply.error));
|
||||||
req->errors++;
|
req->errors = -EIO;
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,7 +448,7 @@ static struct nbd_cmd *nbd_read_stat(struct nbd_device *nbd, int index)
|
||||||
if (result <= 0) {
|
if (result <= 0) {
|
||||||
dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n",
|
dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n",
|
||||||
result);
|
result);
|
||||||
req->errors++;
|
req->errors = -EIO;
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n",
|
dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n",
|
||||||
|
@ -518,7 +518,7 @@ static void nbd_clear_req(struct request *req, void *data, bool reserved)
|
||||||
if (!blk_mq_request_started(req))
|
if (!blk_mq_request_started(req))
|
||||||
return;
|
return;
|
||||||
cmd = blk_mq_rq_to_pdu(req);
|
cmd = blk_mq_rq_to_pdu(req);
|
||||||
req->errors++;
|
req->errors = -EIO;
|
||||||
nbd_end_request(cmd);
|
nbd_end_request(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue