diff mbox series

btrfs: directly wake up cleaner kthread in the BTRFS_IOC_SYNC ioctl

Message ID b4c0f0bc574a1b105a02132c2ebedb0e31f235eb.1723052137.git.fdmanana@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: directly wake up cleaner kthread in the BTRFS_IOC_SYNC ioctl | expand

Commit Message

Filipe Manana Aug. 7, 2024, 5:47 p.m. UTC
From: Filipe Manana <fdmanana@suse.com>

The BTRFS_IOC_SYNC ioctl wants to wake up the cleaner kthread so that it
does any pending work (subvolume deletion, delayed iputs, etc), however
it is waking up the transaction kthread, which in turn wakes up the
cleaner. Since we don't have any transaction to commit, as any ongoing
transaction was already committed when it called btrfs_sync_fs() and
the goal is just to wake up the cleaner thread, directly wake up the
cleaner instead of the transaction kthread.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/ioctl.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

Boris Burkov Aug. 7, 2024, 6:25 p.m. UTC | #1
On Wed, Aug 07, 2024 at 06:47:50PM +0100, Filipe Manana wrote:
> The BTRFS_IOC_SYNC ioctl wants to wake up the cleaner kthread so that it
> does any pending work (subvolume deletion, delayed iputs, etc), however
> it is waking up the transaction kthread, which in turn wakes up the
> cleaner. Since we don't have any transaction to commit, as any ongoing
> transaction was already committed when it called btrfs_sync_fs() and
> the goal is just to wake up the cleaner thread, directly wake up the
> cleaner instead of the transaction kthread.
> 
> Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Boris Burkov <boris@bur.io>
> ---
>  fs/btrfs/ioctl.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index e0a664b8a46a..ee01cc828883 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -4765,11 +4765,10 @@ long btrfs_ioctl(struct file *file, unsigned int
>  			return ret;
>  		ret = btrfs_sync_fs(inode->i_sb, 1);
>  		/*
> -		 * The transaction thread may want to do more work,
> -		 * namely it pokes the cleaner kthread that will start
> -		 * processing uncleaned subvols.
> +		 * There may be work for the cleaner kthread to do (subvolume
> +		 * deletion, delayed iputs, defrag inodes, etc), so wake it up.
>  		 */
> -		wake_up_process(fs_info->transaction_kthread);
> +		wake_up_process(fs_info->cleaner_kthread);
>  		return ret;
>  	}
>  	case BTRFS_IOC_START_SYNC:
> -- 
> 2.43.0
Qu Wenruo Aug. 7, 2024, 10:27 p.m. UTC | #2
在 2024/8/8 03:17, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
>
> The BTRFS_IOC_SYNC ioctl wants to wake up the cleaner kthread so that it
> does any pending work (subvolume deletion, delayed iputs, etc), however
> it is waking up the transaction kthread, which in turn wakes up the
> cleaner. Since we don't have any transaction to commit, as any ongoing
> transaction was already committed when it called btrfs_sync_fs() and
> the goal is just to wake up the cleaner thread, directly wake up the
> cleaner instead of the transaction kthread.
>
> Signed-off-by: Filipe Manana <fdmanana@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu
> ---
>   fs/btrfs/ioctl.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index e0a664b8a46a..ee01cc828883 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -4765,11 +4765,10 @@ long btrfs_ioctl(struct file *file, unsigned int
>   			return ret;
>   		ret = btrfs_sync_fs(inode->i_sb, 1);
>   		/*
> -		 * The transaction thread may want to do more work,
> -		 * namely it pokes the cleaner kthread that will start
> -		 * processing uncleaned subvols.
> +		 * There may be work for the cleaner kthread to do (subvolume
> +		 * deletion, delayed iputs, defrag inodes, etc), so wake it up.
>   		 */
> -		wake_up_process(fs_info->transaction_kthread);
> +		wake_up_process(fs_info->cleaner_kthread);
>   		return ret;
>   	}
>   	case BTRFS_IOC_START_SYNC:
diff mbox series

Patch

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index e0a664b8a46a..ee01cc828883 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -4765,11 +4765,10 @@  long btrfs_ioctl(struct file *file, unsigned int
 			return ret;
 		ret = btrfs_sync_fs(inode->i_sb, 1);
 		/*
-		 * The transaction thread may want to do more work,
-		 * namely it pokes the cleaner kthread that will start
-		 * processing uncleaned subvols.
+		 * There may be work for the cleaner kthread to do (subvolume
+		 * deletion, delayed iputs, defrag inodes, etc), so wake it up.
 		 */
-		wake_up_process(fs_info->transaction_kthread);
+		wake_up_process(fs_info->cleaner_kthread);
 		return ret;
 	}
 	case BTRFS_IOC_START_SYNC: