]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
porting: document new block device opening order
authorChristian Brauner <brauner@kernel.org>
Fri, 15 Sep 2023 14:01:02 +0000 (16:01 +0200)
committerChristian Brauner <brauner@kernel.org>
Wed, 20 Sep 2023 12:22:02 +0000 (14:22 +0200)
We've changed the order of opening block devices and superblock
handling. Let's document this so filesystem and vfs developers have
a proper digital paper trail.

Signed-off-by: Christian Brauner <brauner@kernel.org>
Documentation/filesystems/porting.rst

index deac4e973ddc12d326ee9e6874ed90456206f5db..787d10b9e8b520a3e0a1e9cae5bc1be1aaf009dc 100644 (file)
@@ -949,3 +949,29 @@ mmap_lock held.  All in-tree users have been audited and do not seem to
 depend on the mmap_lock being held, but out of tree users should verify
 for themselves.  If they do need it, they can return VM_FAULT_RETRY to
 be called with the mmap_lock held.
+
+---
+
+**mandatory**
+
+The order of opening block devices and matching or creating superblocks has
+changed.
+
+The old logic opened block devices first and then tried to find a
+suitable superblock to reuse based on the block device pointer.
+
+The new logic tries to find a suitable superblock first based on the device
+number, and opening the block device afterwards.
+
+Since opening block devices cannot happen under s_umount because of lock
+ordering requirements s_umount is now dropped while opening block devices and
+reacquired before calling fill_super().
+
+In the old logic concurrent mounters would find the superblock on the list of
+superblocks for the filesystem type. Since the first opener of the block device
+would hold s_umount they would wait until the superblock became either born or
+was discarded due to initialization failure.
+
+Since the new logic drops s_umount concurrent mounters could grab s_umount and
+would spin. Instead they are now made to wait using an explicit wait-wake
+mechanism without having to hold s_umount.