From 6a3d9860253eb74817d98192156378e1edff618c Mon Sep 17 00:00:00 2001 From: Frederic Robra Date: Fri, 8 Nov 2019 13:33:30 +0100 Subject: if connection is lost while connected modul now waits for new connection --- src/kernel/net-txrx.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/kernel/net-txrx.c') 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; -- cgit v1.2.3-55-g7522