summaryrefslogtreecommitdiffstats
path: root/src/kernel/net-txrx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/net-txrx.c')
-rw-r--r--src/kernel/net-txrx.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/kernel/net-txrx.c b/src/kernel/net-txrx.c
index 4ca3fa5..87a9169 100644
--- a/src/kernel/net-txrx.c
+++ b/src/kernel/net-txrx.c
@@ -163,6 +163,10 @@ int dnbd3_send_request(struct dnbd3_sock *sock, struct request *req,
iov[0].iov_base = &request;
iov[0].iov_len = sizeof(request);
lng = iov_num == 1 ? iov[0].iov_len : iov[0].iov_len + iov[1].iov_len;
+ if (unlikely(!sock->sock)) {
+ warn_sock(sock, "socket was shutdown while sending");
+ goto error;
+ }
result = kernel_sendmsg(sock->sock, &msg, iov, iov_num, lng);
if (result != lng) {
error_sock(sock, "connection to server lost");
@@ -336,8 +340,11 @@ int dnbd3_receive_cmd_get_block_mq(struct dnbd3_sock *sock,
if (!req || !blk_mq_request_started(req)) {
error_sock(sock, "unexpected reply (%d) %p", tag, req);
if (req) {
+ cmd = blk_mq_rq_to_pdu(req);
+ mutex_lock(&cmd->lock);
debug_sock(sock, "requeue request");
- dnbd3_requeue_cmd(blk_mq_rq_to_pdu(req));
+ dnbd3_requeue_cmd(cmd);
+ mutex_unlock(&cmd->lock);
}
dnbd3_clear_socket(sock, reply, remaining);
return -EIO;