mbox series

[v2,0/2] btrfs: enhance btrfs device path rename

Message ID cover.1727222308.git.wqu@suse.com (mailing list archive)
Headers show
Series btrfs: enhance btrfs device path rename | expand

Message

Qu Wenruo Sept. 25, 2024, 12:05 a.m. UTC
[CHANGELOG]
v2:
- Update the example of the first patch
  Instead of using the special C program, just touch the soft link
  to trigger the rescan.

- Add Link and reported-by tags for the first patch

- Fix a "weird" -> "wild" typo
  This is really weird...

- Remove the debugging pr_info()

- Use safer strscpy() to replace strncpy()

- Use the shortcut version of conditional operator when possible

Fabian Vogt reported a very interesting case where we can use
"/proc/self/fd/3" to mount a btrfs, then that /proc name will remain as
the device path for the btrfs.

Sometimes udev scan can trigger a rename, and get a proper name back,
but if that doesn't win the race, we got the "/proc/self/fd/3" in the
mtab which makes no sense, since "/proc/self" is bounded to the current
process, no one is going to know where the real device is.

So to enhance the handling:

- Do proper path comparison to determine if we want to update device
  path
  Currently the path comparison is done by strcmp(), which will never
  handle different hard nor soft links.

  Instead go with path_equal() on the resolved paths, which is way more
  reliable.
  This should reduce the unnecessary path name updates in the first
  place.

- Canonicalize the device path if it's not inside "/dev/"
  If we pass a soft link which is not inside "/dev/", we just follow the
  soft link and use the final destination instead.

  It can be something like "/dev/dm-2", other than more readable LVM
  names like "/dev/test/scratch1", but it's still way better than
  "/proc/self/fd/3".

  If the soft link itself is already inside "/dev/", then we can
  directly use the path.

  This is to allow fstest run properly without forced to use
  "/dev/dm-*" instead of the "/dev/mapper/test-scratch1" as test
  devices.
  Otherwise fs tests will reject runs because it believe the btrfs
  is mounted somewhere else.

Qu Wenruo (2):
  btrfs: avoid unnecessary device path update for the same device
  btrfs: canonicalize the device path before adding it

 fs/btrfs/volumes.c | 107 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 105 insertions(+), 2 deletions(-)