btrfs: fix unlocked access of delalloc_inodes
list_splice_init will make delalloc_inodes empty, but without a spinlock around, this may produce corrupted list head, accessed in many placess, The race window is very tight and nobody seems to have hit it so far. Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
027ed2f004
commit
5be76758f3
@ -2911,9 +2911,8 @@ static int btrfs_destroy_delalloc_inodes(struct btrfs_root *root)
|
|||||||
|
|
||||||
INIT_LIST_HEAD(&splice);
|
INIT_LIST_HEAD(&splice);
|
||||||
|
|
||||||
list_splice_init(&root->fs_info->delalloc_inodes, &splice);
|
|
||||||
|
|
||||||
spin_lock(&root->fs_info->delalloc_lock);
|
spin_lock(&root->fs_info->delalloc_lock);
|
||||||
|
list_splice_init(&root->fs_info->delalloc_inodes, &splice);
|
||||||
|
|
||||||
while (!list_empty(&splice)) {
|
while (!list_empty(&splice)) {
|
||||||
btrfs_inode = list_entry(splice.next, struct btrfs_inode,
|
btrfs_inode = list_entry(splice.next, struct btrfs_inode,
|
||||||
|
Loading…
Reference in New Issue
Block a user