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

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

From: Su Yue <hidden>
Date: 2021-08-31 14:40:41

On Tue 31 Aug 2021 at 06:41, Anand Jain [off-list ref] 
wrote:
Ping.
In the past week, I spent some time on testing this patchset and
the patch 'btrfs: fix lockdep warning while mounting sprout fs'.

Same as you, I wonder if there is any race condition. Just wrote
some scripts including device removal, replace and sprout while
busy looping showing mount info. It runned well and passed 
xfstests
in my two VMs. I'm not a pundit in btrfs device field so I can't 
give my
RBs even these patches looks almost okay to me.

--
Su
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:
quoted
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