diff options
-rw-r--r-- | fs/btrfs/ctree.h | 3 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 3 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 2 |
3 files changed, 8 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 34019c8b6158..8b1d06fa222d 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -787,6 +787,9 @@ enum { | |||
787 | * main phase. The fs_info::balance_ctl is initialized. | 787 | * main phase. The fs_info::balance_ctl is initialized. |
788 | */ | 788 | */ |
789 | BTRFS_FS_BALANCE_RUNNING, | 789 | BTRFS_FS_BALANCE_RUNNING, |
790 | |||
791 | /* Indicate that the cleaner thread is awake and doing something. */ | ||
792 | BTRFS_FS_CLEANER_RUNNING, | ||
790 | }; | 793 | }; |
791 | 794 | ||
792 | struct btrfs_fs_info { | 795 | struct btrfs_fs_info { |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 18eefc5b2532..6a2a2a951705 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -1682,6 +1682,8 @@ static int cleaner_kthread(void *arg) | |||
1682 | while (1) { | 1682 | while (1) { |
1683 | again = 0; | 1683 | again = 0; |
1684 | 1684 | ||
1685 | set_bit(BTRFS_FS_CLEANER_RUNNING, &fs_info->flags); | ||
1686 | |||
1685 | /* Make the cleaner go to sleep early. */ | 1687 | /* Make the cleaner go to sleep early. */ |
1686 | if (btrfs_need_cleaner_sleep(fs_info)) | 1688 | if (btrfs_need_cleaner_sleep(fs_info)) |
1687 | goto sleep; | 1689 | goto sleep; |
@@ -1728,6 +1730,7 @@ static int cleaner_kthread(void *arg) | |||
1728 | */ | 1730 | */ |
1729 | btrfs_delete_unused_bgs(fs_info); | 1731 | btrfs_delete_unused_bgs(fs_info); |
1730 | sleep: | 1732 | sleep: |
1733 | clear_bit(BTRFS_FS_CLEANER_RUNNING, &fs_info->flags); | ||
1731 | if (kthread_should_park()) | 1734 | if (kthread_should_park()) |
1732 | kthread_parkme(); | 1735 | kthread_parkme(); |
1733 | if (kthread_should_stop()) | 1736 | if (kthread_should_stop()) |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index b6025b5d0b25..5c349667c761 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -3251,6 +3251,8 @@ void btrfs_add_delayed_iput(struct inode *inode) | |||
3251 | ASSERT(list_empty(&binode->delayed_iput)); | 3251 | ASSERT(list_empty(&binode->delayed_iput)); |
3252 | list_add_tail(&binode->delayed_iput, &fs_info->delayed_iputs); | 3252 | list_add_tail(&binode->delayed_iput, &fs_info->delayed_iputs); |
3253 | spin_unlock(&fs_info->delayed_iput_lock); | 3253 | spin_unlock(&fs_info->delayed_iput_lock); |
3254 | if (!test_bit(BTRFS_FS_CLEANER_RUNNING, &fs_info->flags)) | ||
3255 | wake_up_process(fs_info->cleaner_kthread); | ||
3254 | } | 3256 | } |
3255 | 3257 | ||
3256 | void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info) | 3258 | void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info) |