[PATCH] nvme: Do not detach nshead when a namespace is removed

Sagi Grimberg sagi at grimberg.me
Mon Mar 15 17:27:14 GMT 2021


> 'struct nshead' and 'struct ns' have different lifetimes; the nshead
> can (and occasionally will) stay around even if no namespaces are
> connected, as it will only be finally removed once the last
> opener is gone.
> Once the system enters this state it becomes very hard to recover,
> as the only way to remove a namespace is to disconnect the controller,
> but the nshead is precisely _not_ related to a controller. This leads
> to the very annoying behaviour that a subsequent 'nvme connect' call
> will establish a _different_ nshead, _and_ the previous nshead will
> stay around:
> 
>> nvme list
> /dev/nvme0n1     9329c4c4af01db2c     Linux \
>      1          17.18  GB /  17.18  GB      4 KiB +  0 B   5.3.18-4
>> nvme disconnect -d /dev/nvme0
>> nvme list
> /dev/nvme0n1                                \
>      -1          0.00   B /   0.00   B      1   B +  0 B   n1
>> nvme connect
>> nvme list
> /dev/nvme0n1     9329c4c4af01db2c     Linux \
>      -1          0.00   B /   0.00   B      1   B +  0 B   5.3.18-4
> /dev/nvme0n2     9329c4c4af01db2c     Linux \
>      1          17.18  GB /  17.18  GB      4 KiB +  0 B   5.3.18-4
> 
> This patch fixes the situation by only removing the nshead from the
> internal lists once it's being finally removed.

I'd say that we should remove the nshead exactly when the last
lower ns was removed? Why should it still occupy sysfs and ida
resources if it is going away soon?



More information about the Linux-nvme mailing list