summaryrefslogtreecommitdiffstats
path: root/src/kernel/mq.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/mq.c')
-rw-r--r--src/kernel/mq.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/kernel/mq.c b/src/kernel/mq.c
index cc710b2..67b33df 100644
--- a/src/kernel/mq.c
+++ b/src/kernel/mq.c
@@ -178,14 +178,14 @@ static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
struct request *req = blk_mq_rq_from_pdu(cmd);
struct dnbd3_device *dev = cmd->dnbd3;
struct dnbd3_sock *sock;
- int ret = -1;
+ int ret;
// debug_dev(dev, "handle request at position %lu, size %d, index %d",
// blk_rq_pos(req), blk_rq_bytes(req), index);
- if (!dev->socks || !dnbd3_is_sock_alive(dev->socks[index])) {
- error_dev(dev, "ending request device not connected");
+ if (!dev->socks) {
+ error_dev(dev, "ending request: device not connected");
dnbd3_end_cmd(cmd, BLK_STS_IOERR);
return -EIO;
}
@@ -193,27 +193,24 @@ static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
mutex_lock(&sock->tx_lock);
if (unlikely(!sock->sock)) {
- mutex_unlock(&sock->tx_lock);
- warn_sock(sock, "not connected");
- return -EIO;
+ goto err;
}
blk_mq_start_request(req);
if (unlikely(sock->pending && sock->pending != req)) {
- dnbd3_requeue_cmd(cmd);
- ret = 0;
- goto out;
+ goto err;
}
ret = dnbd3_send_request(sock, blk_mq_rq_from_pdu(cmd), cmd);
- if (ret == -EAGAIN) {
- error_dev(dev, "request send failed, requeueing");
- dnbd3_requeue_cmd(cmd);
- ret = 0;
+ if (ret > 0) {
+ mutex_unlock(&sock->tx_lock);
+ return 0;
}
-out:
+ error_dev(dev, "request send failed, requeueing");
+err:
mutex_unlock(&sock->tx_lock);
- return ret;
+ dnbd3_requeue_cmd(cmd);
+ return 0;
}
/**