We used to return -ETIMEDOUT if io timeout happened. But since commit d970958b2d24 ("nbd: enable replace socket if only one connection is configured"), user space would not get -ETIMEDOUT. This commit fixes this. Only return -ETIMEDOUT if only one socket is configured by ioctl and the user specified a non-zero timeout value. Reviewed-by: Josef Bacik <josef@xxxxxxxxxxxxxx> Signed-off-by: Hou Pu <houpu@xxxxxxxxxxxxx> --- drivers/block/nbd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index ce7e9f223b20..538e9dcf5bf2 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -395,6 +395,11 @@ static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req, } config = nbd->config; + if (!test_bit(NBD_RT_BOUND, &config->runtime_flags) && + config->num_connections == 1 && + nbd->tag_set.timeout) + goto error_out; + if (config->num_connections > 1 || (config->num_connections == 1 && nbd->tag_set.timeout)) { dev_err_ratelimited(nbd_to_dev(nbd), @@ -455,6 +460,7 @@ static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req, return BLK_EH_RESET_TIMER; } +error_out: dev_err_ratelimited(nbd_to_dev(nbd), "Connection timed out\n"); set_bit(NBD_RT_TIMEDOUT, &config->runtime_flags); cmd->status = BLK_STS_IOERR; -- 2.11.0