}
        config = nbd->config;
 
-       if (config->num_connections > 1) {
+       if (config->num_connections > 1 ||
+           (config->num_connections == 1 && nbd->tag_set.timeout)) {
                dev_err_ratelimited(nbd_to_dev(nbd),
                                    "Connection timed out, retrying (%d/%d alive)\n",
                                    atomic_read(&config->live_connections),
                                    config->num_connections);
                /*
                 * Hooray we have more connections, requeue this IO, the submit
-                * path will put it on a real connection.
+                * path will put it on a real connection. Or if only one
+                * connection is configured, the submit path will wait util
+                * a new connection is reconfigured or util dead timeout.
                 */
-               if (config->socks && config->num_connections > 1) {
+               if (config->socks) {
                        if (cmd->index < config->num_connections) {
                                struct nbd_sock *nsock =
                                        config->socks[cmd->index];
                                dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n",
                                        result);
                                /*
-                                * If we've disconnected or we only have 1
-                                * connection then we need to make sure we
+                                * If we've disconnected, we need to make sure we
                                 * complete this request, otherwise error out
                                 * and let the timeout stuff handle resubmitting
                                 * this request onto another connection.
                                 */
-                               if (nbd_disconnected(config) ||
-                                   config->num_connections <= 1) {
+                               if (nbd_disconnected(config)) {
                                        cmd->status = BLK_STS_IOERR;
                                        goto out;
                                }
 
        if (config->num_connections <= 1) {
                dev_err_ratelimited(disk_to_dev(nbd->disk),
-                                   "Attempted send on invalid socket\n");
+                                   "Dead connection, failed to find a fallback\n");
                return new_index;
        }