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 |
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
在 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 --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: