From: Nilay Shroff <nilay@linux.ibm.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-nvme@lists.infradead.org, kbusch@kernel.org,
sagi@grimberg.me, axboe@fb.com, john.g.garry@oracle.com,
wenxiong@linux.ibm.com, gjoyce@linux.ibm.com
Subject: Re: [PATCH 1/2] nvme: keep transport module referenced while head node is open
Date: Wed, 2 Sep 2026 19:39:32 +0530 [thread overview]
Message-ID: <c725f90c-b119-4669-afb7-6aeb6c4a308b@linux.ibm.com> (raw)
In-Reply-To: <20260902133104.GA20945@lst.de>
On 9/2/26 7:01 PM, Christoph Hellwig wrote:
> On Mon, Aug 31, 2026 at 08:49:54PM +0530, Nilay Shroff wrote:
>> When a user opens an NVMe multipath head node, we take a reference to
>> the head node, but this does not prevent the transport module backing
>> its paths from being unloaded. This can result in the multipath head
>> remaining open while its underlying transport module is unloaded.
>
> Which makes sense. Different paths can use different transports, but
> even when all paths go away, the head can stick around.
>
>> Fix this by taking a reference to the transport module for each active
>> path when the multipath head node is opened. Keep track of the number
>> of active head node openers so that dynamically added paths acquire the
>> same number of transport module references.
>
> I'm not sure this is correct. Unloading the layer below should be
> just fine.
>
> What practical problem do you want to solve with this?
>
The problem we are trying to solve is that the multipath head node can
remain open and be used by a filesystem even though the transport module
backing its paths can be unloaded.
For example, we have a shared namespace exposed through two PCIe paths:
nvme-subsys0
nvme0 -> nvme0n1
nvme1 -> nvme0n1
The namespace is formatted with ext4 and mounted:
# mount -t ext4 /dev/nvme0n1 /mnt/disk
At this point, the multipath head has a reference to nvme_core, but the
nvme transport module itself has a refcount of zero:
# lsmod | grep nvme
nvme 262144 0
nvme_core 458752 2
nvme_keyring 262144 1
nvme_auth 262144 1
Consequently, the transport module can be unloaded:
# rmmod nvme
After this, the filesystem remains mounted, but I/O starts failing:
EXT4-fs (...): shut down requested (2)
Aborting journal on device nvme0n1-8.
block nvme0n1: no available path - failing I/O
Buffer I/O error on dev nvme0n1, logical block ..., lost sync page write
JBD2: I/O error when updating journal superblock for nvme0n1-8.
This becomes particularly problematic if the multipath NVMe device is
used as the root filesystem. Once the transport module is unloaded, I/O
fails and we can no longer run commands to reload the NVMe module. In
our testing, the only recovery option in that situation has been to
power-cycle the system.
So the practical problem is that an open multipath head can continue to
be used after its underlying transport module has been unloaded. The
proposed change keeps the transport module referenced while the head
node is open, preventing the module from being unloaded in this
scenario.
Thanks,
--Nilay
next prev parent reply other threads:[~2026-09-02 14:09 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 15:19 [PATCH 0/2] nvme: add reference counting for transport modules Nilay Shroff
2026-08-31 15:19 ` [PATCH 1/2] nvme: keep transport module referenced while head node is open Nilay Shroff
2026-09-01 16:39 ` Keith Busch
2026-09-02 4:55 ` Nilay Shroff
2026-09-02 0:20 ` Wen Xiong
2026-09-02 13:31 ` Christoph Hellwig
2026-09-02 14:09 ` Nilay Shroff [this message]
2026-09-02 14:13 ` Christoph Hellwig
2026-09-02 14:25 ` Keith Busch
2026-09-02 14:27 ` Nilay Shroff
2026-09-13 14:03 ` Nilay Shroff
2026-08-31 15:19 ` [PATCH 2/2] nvme: add context annotation for nvme_ns_head::nr_openers Nilay Shroff
2026-09-01 8:14 ` [PATCH 0/2] nvme: add reference counting for transport modules John Garry
2026-09-01 9:47 ` Nilay Shroff
2026-09-01 10:14 ` John Garry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c725f90c-b119-4669-afb7-6aeb6c4a308b@linux.ibm.com \
--to=nilay@linux.ibm.com \
--cc=axboe@fb.com \
--cc=gjoyce@linux.ibm.com \
--cc=hch@lst.de \
--cc=john.g.garry@oracle.com \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
--cc=wenxiong@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox