33 lines
983 B
Diff
33 lines
983 B
Diff
From: David Sterba <dsterba@suse.cz>
|
|
Date: Thu, 15 Dec 2011 02:10:55 +0100
|
|
Patch-mainline: pending
|
|
References: FATE#306586
|
|
Subject: [PATCH] btrfs: workaround for cleaner deadlock
|
|
|
|
Signed-off-by: David Sterba <dsterba@suse.cz>
|
|
---
|
|
fs/btrfs/disk-io.c | 2 ++
|
|
1 files changed, 2 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
|
|
index 3f9d555..12d785b 100644
|
|
--- a/fs/btrfs/disk-io.c
|
|
+++ b/fs/btrfs/disk-io.c
|
|
@@ -1572,11 +1572,13 @@ static int cleaner_kthread(void *arg)
|
|
vfs_check_frozen(root->fs_info->sb, SB_FREEZE_WRITE);
|
|
|
|
if (!(root->fs_info->sb->s_flags & MS_RDONLY) &&
|
|
+ down_read_trylock(&root->fs_info->sb->s_umount) &&
|
|
mutex_trylock(&root->fs_info->cleaner_mutex)) {
|
|
btrfs_run_delayed_iputs(root);
|
|
btrfs_clean_old_snapshots(root);
|
|
mutex_unlock(&root->fs_info->cleaner_mutex);
|
|
btrfs_run_defrag_inodes(root->fs_info);
|
|
+ up_read(&root->fs_info->sb->s_umount);
|
|
}
|
|
|
|
if (freezing(current)) {
|
|
--
|
|
1.7.7.3
|
|
|