diff options
author | David Sterba <dsterba@suse.cz> | 2011-06-09 10:02:51 +0000 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-06-10 18:57:11 -0400 |
commit | 5be76758f35ec6578e5b9b150aa513ac26bd9c54 (patch) | |
tree | 071251fb002ec06e3db5848e9385386aa04f9197 /fs/btrfs | |
parent | 027ed2f0044e95a97ed34db2d55a9ca95ba84385 (diff) | |
download | op-kernel-dev-5be76758f35ec6578e5b9b150aa513ac26bd9c54.zip op-kernel-dev-5be76758f35ec6578e5b9b150aa513ac26bd9c54.tar.gz |
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/btrfs')
-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 a203d36..33b744a 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, |