Skip to content

Commit 525273f

Browse files
committed
Merge tag 'for-4.15-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fix from David Sterba: "It's been reported recently that readdir can list stale entries under some conditions. Fix it." * tag 'for-4.15-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: Btrfs: fix stale entries in readdir
2 parents 5b7d279 + e4fd493 commit 525273f

File tree

1 file changed

+8
-18
lines changed

1 file changed

+8
-18
lines changed

fs/btrfs/delayed-inode.c

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1633,28 +1633,18 @@ void btrfs_readdir_put_delayed_items(struct inode *inode,
16331633
int btrfs_should_delete_dir_index(struct list_head *del_list,
16341634
u64 index)
16351635
{
1636-
struct btrfs_delayed_item *curr, *next;
1637-
int ret;
1638-
1639-
if (list_empty(del_list))
1640-
return 0;
1636+
struct btrfs_delayed_item *curr;
1637+
int ret = 0;
16411638

1642-
list_for_each_entry_safe(curr, next, del_list, readdir_list) {
1639+
list_for_each_entry(curr, del_list, readdir_list) {
16431640
if (curr->key.offset > index)
16441641
break;
1645-
1646-
list_del(&curr->readdir_list);
1647-
ret = (curr->key.offset == index);
1648-
1649-
if (refcount_dec_and_test(&curr->refs))
1650-
kfree(curr);
1651-
1652-
if (ret)
1653-
return 1;
1654-
else
1655-
continue;
1642+
if (curr->key.offset == index) {
1643+
ret = 1;
1644+
break;
1645+
}
16561646
}
1657-
return 0;
1647+
return ret;
16581648
}
16591649

16601650
/*

0 commit comments

Comments
 (0)