Thread (14 messages) 14 messages, 3 authors, 2021-09-02

Re: [PATCH V5 0/4] btrf_show_devname related fixes

From: Anand Jain <hidden>
Date: 2021-08-30 22:41:46

Ping.

This patchset is fixing a bug reported by btrfs/238.

Here I am proposing to remove traversing the device list in 
btrfs_show_devname(), instead use device->name as stored in 
fs_devices::latest_dev.

Kindly review/comment.

Thx, Anand



On 24/08/2021 13:05, Anand Jain wrote:
v5: Patches reorged.
  Patch (btrfs: consolidate device_list_mutex in prepare_sprout to its parent)
  moved into a new set as it has a dependency on an older patch in the ML.
  Change log updated.
v4: Fix unrelated changes
v3: Add missing rcu_lock in show_devname
v2: Use latest_dev so that device path is also shown

Su Yue reported [1] warn() as a result of a race between the following two
threads,
   Thread-A: function stack leading to btrfs_prepare_sprout()
and
   Thread-B: function stack leading to btrfs_show_devname()

[1]  https://patchwork.kernel.org/project/linux-btrfs/patch/20210818041944.5793-1-l@damenly.su/

While btrfs_prepare_sprout() moves the fs_devices::devices into
fs_devices::seed_list, the btrfs_show_devname searched for the devices
and found none, leading to the warning as in [1] (above).

The btrfs_prepare_sprout() uses device_list_mutex however
btrfs_show_devname() don't and, the device_list_mutex in
btrfs_show_devname() was removed by the patch 88c14590cdd6
(btrfs: use RCU in btrfs_show_devname for device list traversal)
for the perforamcne reasons.

This series does not intend to reintroduce the device_list_mutex in
btrfs_prepare_sprout() but instead saves the pointer to btrfs_devices
in the fs_devices::latest_dev so that btrfs_show_devname() can use it.

patch 1 converts fs_devices::latest_bdev type from struct block_device to
         struct btrfs_device and renames it to latest_dev
patch 2 btrfs_show_devname() uses the fs_devices::latest_dev::name to show
         the device path in the /proc/self/mounts
patch 3 fixes a stale latest_dev pointer after the sprout operation
patch 4 fixes an old comment about the function btrfs_show_devname()

Anand Jain (4):
   btrfs: convert latest_bdev type to struct btrfs_device and rename
   btrfs: use latest_dev in btrfs_show_devname
   btrfs: update latest_dev when we sprout
   btrfs: fix comment about the btrfs_show_devname

  fs/btrfs/disk-io.c   |  6 +++---
  fs/btrfs/extent_io.c |  2 +-
  fs/btrfs/inode.c     |  2 +-
  fs/btrfs/super.c     | 26 ++++----------------------
  fs/btrfs/volumes.c   | 17 ++++++++---------
  fs/btrfs/volumes.h   |  2 +-
  6 files changed, 18 insertions(+), 37 deletions(-)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help