Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b216cbfb authored by Miao Xie's avatar Miao Xie Committed by Josef Bacik
Browse files

Btrfs: don't invoke btrfs_invalidate_inodes() in the spin lock context



btrfs_invalidate_inodes() may sleep, so we should not invoke it in the
spin lock context. Fix it.

Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
parent 314297c2
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -3658,8 +3658,11 @@ static void btrfs_destroy_ordered_operations(struct btrfs_transaction *t,
					 ordered_operations);
					 ordered_operations);


		list_del_init(&btrfs_inode->ordered_operations);
		list_del_init(&btrfs_inode->ordered_operations);
		spin_unlock(&root->fs_info->ordered_extent_lock);


		btrfs_invalidate_inodes(btrfs_inode->root);
		btrfs_invalidate_inodes(btrfs_inode->root);

		spin_lock(&root->fs_info->ordered_extent_lock);
	}
	}


	spin_unlock(&root->fs_info->ordered_extent_lock);
	spin_unlock(&root->fs_info->ordered_extent_lock);
@@ -3781,8 +3784,11 @@ static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root)
		list_del_init(&btrfs_inode->delalloc_inodes);
		list_del_init(&btrfs_inode->delalloc_inodes);
		clear_bit(BTRFS_INODE_IN_DELALLOC_LIST,
		clear_bit(BTRFS_INODE_IN_DELALLOC_LIST,
			  &btrfs_inode->runtime_flags);
			  &btrfs_inode->runtime_flags);
		spin_unlock(&root->fs_info->delalloc_lock);


		btrfs_invalidate_inodes(btrfs_inode->root);
		btrfs_invalidate_inodes(btrfs_inode->root);

		spin_lock(&root->fs_info->delalloc_lock);
	}
	}


	spin_unlock(&root->fs_info->delalloc_lock);
	spin_unlock(&root->fs_info->delalloc_lock);