summaryrefslogtreecommitdiffstats
path: root/fs/ext2/super.c
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2016-05-20 13:50:33 -0700
committerChris Mason <clm@fb.com>2016-06-25 06:20:10 -0700
commit02dbfc99b424dde3cf0a492ed3bec4f222441754 (patch)
treed08f267bac15ea5939185424bbe73306b7f11cb6 /fs/ext2/super.c
parent33688abb2802ff3a230bd2441f765477b94cc89e (diff)
downloadop-kernel-dev-02dbfc99b424dde3cf0a492ed3bec4f222441754.zip
op-kernel-dev-02dbfc99b424dde3cf0a492ed3bec4f222441754.tar.gz
Btrfs: fix ->iterate_shared() by upgrading i_rwsem for delayed nodes
Commit fe742fd4f90f ("Revert "btrfs: switch to ->iterate_shared()"") backed out the conversion to ->iterate_shared() for Btrfs because the delayed inode handling in btrfs_real_readdir() is racy. However, we can still do readdir in parallel if there are no delayed nodes. This is a temporary fix which upgrades the shared inode lock to an exclusive lock only when we have delayed items until we come up with a more complete solution. While we're here, rename the btrfs_{get,put}_delayed_items functions to make it very clear that they're just for readdir. Tested with xfstests and by doing a parallel kernel build: while make tinyconfig && make -j4 && git clean dqfx; do : done along with a bunch of parallel finds in another shell: while true; do for ((i=0; i<4; i++)); do find . >/dev/null & done wait done Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: David Sterba <dsterba@suse.com> Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/ext2/super.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud