From 93dc338dfd719f02290639394ad7bd1800b971e4 Mon Sep 17 00:00:00 2001 From: Frederic Robra Date: Tue, 3 Sep 2019 11:25:19 +0200 Subject: added support to requeue busy requests --- src/kernel/net.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/kernel/net.c') diff --git a/src/kernel/net.c b/src/kernel/net.c index cb4e76c..67f9c74 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -75,14 +75,11 @@ static void dnbd3_timer(struct timer_list *arg) } } - if (!busy) { - /* start after 4 seconds */ - if (dev->timer_count % TIMER_INTERVAL_PROBE_NORMAL == 4) { - queue_work(dnbd3_wq, &dev->discovery_worker); - } - - + /* start after 2 seconds */ + if (dev->timer_count % TIMER_INTERVAL_PROBE_NORMAL == 2) { + queue_work(dnbd3_wq, &dev->discovery_worker); } + dev->timer_count++; dev->timer.expires = jiffies + HZ; add_timer(&dev->timer); @@ -185,7 +182,9 @@ static void dnbd3_keepalive_worker(struct work_struct *work) sock = container_of(work, struct dnbd3_sock, keepalive_worker); if (sock->server != NULL && !sock->panic) { debug_sock(sock, "starting keepalive worker"); + mutex_lock(&sock->tx_lock); dnbd3_send_request_cmd(sock, CMD_KEEPALIVE); + mutex_unlock(&sock->tx_lock); } } @@ -237,6 +236,7 @@ static int dnbd3_panic_connect(struct dnbd3_device *dev) { struct dnbd3_server *working = NULL; int i; + debug_dev(dev, "panic connect"); for (i = 0; i < NUMBER_CONNECTIONS; i++) { if (dnbd3_is_sock_alive(dev->socks[i])) { working = dev->socks[i].server; @@ -273,7 +273,7 @@ static int dnbd3_adjust_connections(struct dnbd3_device *dev) { int i, j, fallback; struct dnbd3_server *plan[NUMBER_CONNECTIONS]; struct dnbd3_server **servers = dnbd3_sort_server(dev); -//TODO don't connect to anyting bader then rtt unknown + if (servers && servers[0]->host.type != 0) { plan[0] = servers[0]; fallback = 0; @@ -300,6 +300,8 @@ static int dnbd3_adjust_connections(struct dnbd3_device *dev) { i, plan[i]->avg_rtt); } kfree(servers); + //TODO connection plan sortieren + for (i = 0; i < NUMBER_CONNECTIONS; i++) { if (plan[i] != dev->socks[i].server) { if (dnbd3_is_sock_alive(dev->socks[i])) { @@ -677,13 +679,13 @@ static int dnbd3_socket_connect(struct dnbd3_sock *sock, result = -EIO; goto error; } - mutex_unlock(&sock->tx_lock); sock->panic = false; if (!sock->sock) { error_sock(sock, "socket is not connected"); server->failures++; + mutex_unlock(&sock->tx_lock); result = -EIO; goto error; } @@ -691,15 +693,17 @@ static int dnbd3_socket_connect(struct dnbd3_sock *sock, result = dnbd3_send_request_cmd(sock, CMD_SELECT_IMAGE); if (result <= 0) { - error_sock(sock, "connection to image %s failed", dev->imgname); + mutex_unlock(&sock->tx_lock); result = -EIO; goto error; } + result = dnbd3_receive_cmd(sock, &reply); if (result <= 0) { error_sock(sock, "receive cmd to image %s failed", dev->imgname); + mutex_unlock(&sock->tx_lock); result = -EIO; goto error; } @@ -707,6 +711,7 @@ static int dnbd3_socket_connect(struct dnbd3_sock *sock, || reply.size < 4) { error_sock(sock, "receive select image wrong header %s", dev->imgname); + mutex_unlock(&sock->tx_lock); result = -EIO; goto error; } @@ -714,6 +719,7 @@ static int dnbd3_socket_connect(struct dnbd3_sock *sock, if (result <= 0) { error_sock(sock, "receive cmd select image %s failed", dev->imgname); + mutex_unlock(&sock->tx_lock); result = -EIO; goto error; } @@ -730,6 +736,7 @@ static int dnbd3_socket_connect(struct dnbd3_sock *sock, if (dnbd3_send_request_cmd(sock, CMD_GET_SERVERS) <= 0) { error_sock(sock, "failed to get servers in discovery"); } + mutex_unlock(&sock->tx_lock); return 0; error: @@ -770,6 +777,7 @@ static int dnbd3_socket_disconnect(struct dnbd3_sock *sock) */ if (sock->sock) { kernel_sock_shutdown(sock->sock, SHUT_RDWR); + dndb3_reque_busy_requests(sock); } mutex_unlock(&sock->tx_lock); mutex_destroy(&sock->tx_lock); -- cgit v1.2.3-55-g7522