From 8a71a522f69058af76c84d4157555f82074f1ade Mon Sep 17 00:00:00 2001 From: Frederic Robra Date: Sun, 11 Aug 2019 16:07:05 +0200 Subject: added todos --- src/kernel/net.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/kernel/net.c') diff --git a/src/kernel/net.c b/src/kernel/net.c index 2d0b6ad..5478e95 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -208,6 +208,10 @@ int dnbd3_send_request(struct dnbd3_sock *sock, struct request *req, result = kernel_sendmsg(sock->sock, &msg, iov, iov_num, lng); if (result != lng) { error_sock(sock, "connection to server lost"); + if (cmd) { + blk_mq_requeue_request(req, true); + } + sock->panic = true; sock->server->failures++; goto error; } @@ -823,7 +827,7 @@ static void dnbd3_adjust_connections(struct dnbd3_device *dev) { uint64_t best_rtt = RTT_UNREACHABLE; struct dnbd3_server *server, *existing_server; - /* connect empty sockets */ + /* connect empty sockets */ //TODO check if panic worker connects at the same time, than we would have a problem sock_alive = 0; for (i = 0; i < NUMBER_CONNECTIONS; i++) { if (!dnbd3_is_sock_alive(dev->socks[i])) { @@ -1094,6 +1098,7 @@ static void dnbd3_merge_new_server(struct dnbd3_device *dev, // existing_server->failures = 0; // reset failure count return; } else if (free_server) { + //TODO disconnect the server if it is connected free_server->host = new_server->host; } else if (failed_server) { failed_server->host = new_server->host; @@ -1357,6 +1362,13 @@ error: return result; } +static void dnbd3_clear_req(struct request *req, void *data, bool reserved) +{ + struct dnbd3_cmd *cmd = blk_mq_rq_to_pdu(req); + + cmd->status = BLK_STS_IOERR; + blk_mq_complete_request(req); +} /** * dnbd3_socket_disconnect - disconnect a socket or server @@ -1406,7 +1418,6 @@ static int dnbd3_socket_disconnect(struct dnbd3_sock *sock) } mutex_unlock(&sock->tx_lock); mutex_destroy(&sock->tx_lock); - blk_mq_update_nr_hw_queues(&dev->tag_set, sock_alive - 1); cancel_work_sync(&sock->receive_worker); @@ -1414,6 +1425,17 @@ static int dnbd3_socket_disconnect(struct dnbd3_sock *sock) sock_release(sock->sock); sock->sock = NULL; } + debug_sock(sock, "update nr hw queues to %d", sock_alive -1); +// blk_mq_quiesce_queue(dev->disk->queue); +// debug_sock(sock, "busy iter"); +// blk_mq_tagset_busy_iter(&dev->tag_set, dnbd3_clear_req, NULL); +// debug_sock(sock, "update"); + //TODO can we just stop the failed queue? + blk_mq_update_nr_hw_queues(&dev->tag_set, sock_alive - 1); +// debug_sock(sock, "unquisco"); +// blk_mq_unquiesce_queue(dev->disk->queue); +// debug_sock(sock, "donee"); + sock->server = NULL; sock->panic = false; return 0; -- cgit v1.2.3-55-g7522