diff options
author | David Sterba <dsterba@suse.cz> | 2011-06-09 14:02:51 +0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-06-11 02:57:11 +0400 |
commit | 5be76758f35ec6578e5b9b150aa513ac26bd9c54 (patch) | |
tree | 071251fb002ec06e3db5848e9385386aa04f9197 /fs | |
parent | 027ed2f0044e95a97ed34db2d55a9ca95ba84385 (diff) | |
download | linux-5be76758f35ec6578e5b9b150aa513ac26bd9c54.tar.xz |
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/disk-io.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a203d363184d..33b744a5ac03 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2911,9 +2911,8 @@ static int btrfs_destroy_delalloc_inodes(struct btrfs_root *root) INIT_LIST_HEAD(&splice); - list_splice_init(&root->fs_info->delalloc_inodes, &splice); - spin_lock(&root->fs_info->delalloc_lock); + list_splice_init(&root->fs_info->delalloc_inodes, &splice); while (!list_empty(&splice)) { btrfs_inode = list_entry(splice.next, struct btrfs_inode, |