From: David Sterba Date: Thu, 9 Jun 2011 10:02:51 +0000 (+0000) Subject: btrfs: fix unlocked access of delalloc_inodes X-Git-Tag: v3.0-rc3~9^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5be76758f35ec6578e5b9b150aa513ac26bd9c54;p=platform%2Fkernel%2Flinux-3.10.git 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 Signed-off-by: Chris Mason --- 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,