Hi James

Thanks for you detailed, kindly response and directive.
That's really appreciated.

On 01/18/2018 02:24 PM, James Smart wrote:
>> So in the patch, RESETTING in nvme-fc/rdma is changed to RESET_PREPARE. Then 
>> we get:
>> nvme-fc/rdma RESET_PREPARE -> RECONNECTING -> LIVE
>> nvme-pci     RESET_PREPARE -> RESETTING    -> LIVE
> 
> Right - so another way to look at this is you renamed RESETTING to 
> RESET_PREPARE and added a new RESETTING state in the nvme-pci when in 
> reinits.  Why not simply have the nvme-pci transport transition to 
> RECONNECTING like the other transports. No new states, semantics are all the 
> same.
> 
> Here's what the responsibility of the states are:
> RESETTING:
> -quiescing the blk-mq queues os errors don't bubble back to callees and new 
> io is suspended
> -terminating the link-side association: resets the controller via register 
> access/SET_PROPERTY, deletes connections/queues, cleans out active io and 
> lets them queue for resending, etc.
> -end result is nvme block device is present, but idle, and no active 
> controller on the link side  (link being a transport specific link such as 
> pci, or ethernet/ib for rdma or fc link).
> 
> RECONNECTING:
> - "establish an association at the transport" on PCI this is immediate - you 
> can either talk to the pci function or you can't. With rdma/fc we send 
> transport traffic to create an admin q connection.
> - if association succeeded: the controller is init'd via register 
> accesses/fabric GET/SET_PROPERTIES and admin-queue command, io 
> connections/queues created, blk-mq queues unquiesced, and finally transition 
> to NVME_CTRL_LIVE.
> - if association failed: check controller timeout., if not exceeded, schedule 
> timer and retry later.  With pci, this could cover the temporary loss of the 
> pci function access (a hot plug event) while keeping the nvme blk device live 
> in the system.
> 
> It matches what you are describing but using what we already have in place - 
> with the only difference being the addition of your "boundary" by adding the 
> RECONNECTING state to nvme-pci.

Yes, absolutely. Thanks for your detailed summary here. 
Introducing RECONNECTING into nvme-pci is indeed a clearer way to fix the issue.

> 
> 
>>
>>>> I don't believe RESETTING and RECONNECTING are that similar - unless - you 
>>>> are looking at that "reinit" part that we left grandfathered into PCI.
>> Yes. I have got the point. Thanks for your directive.
>>
>> Both nvme-pc and nvme-fc/rdma have "shutdown" part to tear down 
>> queues/connects, quiesce queues, cancel outstanding requests...
>> We could call this part as "shutdowning" as well as the scheduling gap.
>> Because the difference of initializing between the nvme-pci and 
>> nvme-fc/rdma,  we could call "reiniting" for nvme-pci and
>> call "reconnecting" for nvme-fc/rdma
> 
> I don't think we need different states for the two. The actions taken are 
> really very similar. How they do the actions varies slightly, but not what 
> they are trying to do.   Thus, I'd prefer we keep the existing RECONNECTING 
> state and use it in nvme-pci as well. I'm open to renaming it if there's 
> something about the name that is not agreeable.

Yes. And I will use RECONNECTING in next version to fix this issue. If better 
name, could introduce in other patchset. :)


Many thanks again.
Jianchao

Reply via email to