On 03/03/2020 03:13 PM, Josef Bacik wrote: > On 2/28/20 1:40 AM, Hou Pu wrote: >> In commit 2da22da5734 (nbd: fix zero cmd timeout handling v2), >> it is allowed to reset timer when it fires if tag_set.timeout >> is set to zero. If the server is shutdown and a new socket >> is reconfigured, the request should be requeued to be processed by >> new server instead of waiting for response from the old one. >> >> Signed-off-by: Hou Pu <houpu@xxxxxxxxxxxxx> > > I'm confused by this, if we get here we've already timed out and > requeued once right? Why do we need to requeue again? Thanks, > We may not have timed out already. If the tag_set.timeout=0, then the block timer will fire every 30 seconds. This could be the first time the timer has fired. If it has fired multiple times already then it still would not have been requeued because the num_connections=1 code just does a BLK_EH_RESET_TIMER when timeout=0 and does not have support for detecting reconnects. In this second patch if timeout=0 and num_connections=1 we restart the command when the command timer fires and we detect a new connection (nsock->cookie has incremented). I was saying in the last patch, maybe waiting for reconnect is wrong. Does a cmd timeout=0 mean to wait for a reconnect or in this patch should we do: 1. if timeout=0, num_connections=1, and the cmd timer fires and the conneciton is marked dead then requeue the command. 2. we then rely on the dead_conn_timeout code to decide how long to wait for a reconnect.