Re: [PATCH rfc 20/30] nvme: add err, reconnect and delete work items to nvme core
From: Sagi Grimberg <sagi@grimberg.me>
Date: 2017-06-19 14:14:37
Also in:
linux-nvme
From: Sagi Grimberg <sagi@grimberg.me>
Date: 2017-06-19 14:14:37
Also in:
linux-nvme
quoted
We intent for these handlers to become generic, thus, add them to the nvme core controller struct.Do you remember why we actually need all the different work items?
I remember documenting it at some point, but either it got lost somewhere or I don't remember...
We need err_work to recover from RDMA QP-level errors.
transport errors usually detected in soft-irq, so we queue up err_work to: 1. stop + drain queues 2. fail inflight I/O. 3. queue delayed reconnect (reconnect_work)
But how is it so different from a reset in that respect? Similarly why do we need reset to be different from reconnect? Especially as reconnect sort of is the reset of fabrics.
Hmm, resets and reconnects are indeed similar, but one difference is that in resets we do not fail fast inflight I/O as the expectation is that the recovery should be immediate (it also matches pci with that respect) while we consider reconnect something that can last for a while so we fail fast to allow failover and continue reconnect attempts quietly. Another difference is that failed reset results in a controller removal while in reconnects we have to exhaust ctrl_loss_tmo. We could change things, like merging reconnect and reset and introduce a concept of "on-host reset". Not sure it will be any less confusing though...