[Devel] [PATCH vz9 4/5] fs: sync: introduce argument struct for helper routines
Kirill Tkhai
ktkhai at virtuozzo.com
Mon Nov 22 11:07:54 MSK 2021
On 22.11.2021 09:20, Nikita Yushchenko wrote:
> In this commit, this replaces passing an integer flag by pointer.
>
> With implementation of per-VE sync, this will be also used to pass
> VE where sync happens.
>
> https://jira.sw.ru/browse/PSBM-44684
> Signed-off-by: Nikita Yushchenko <nikita.yushchenko at virtuozzo.com>
Reviewed-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> fs/sync.c | 28 +++++++++++++++++++---------
> 1 file changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/fs/sync.c b/fs/sync.c
> index f57e22fb118f..31e6f0c6402d 100644
> --- a/fs/sync.c
> +++ b/fs/sync.c
> @@ -69,6 +69,10 @@ int sync_filesystem(struct super_block *sb)
> }
> EXPORT_SYMBOL(sync_filesystem);
>
> +struct sync_arg {
> + int wait;
> +};
> +
> static void sync_inodes_one_sb(struct super_block *sb, void *arg)
> {
> if (!sb_rdonly(sb))
> @@ -77,9 +81,11 @@ static void sync_inodes_one_sb(struct super_block *sb, void *arg)
>
> static void sync_fs_one_sb(struct super_block *sb, void *arg)
> {
> + struct sync_arg *sarg = arg;
> +
> if (!sb_rdonly(sb) && !(sb->s_iflags & SB_I_SKIP_SYNC) &&
> sb->s_op->sync_fs)
> - sb->s_op->sync_fs(sb, *(int *)arg);
> + sb->s_op->sync_fs(sb, sarg->wait);
> }
>
> static void fdatawrite_one_bdev(struct block_device *bdev, void *arg)
> @@ -120,15 +126,17 @@ int ve_fsync_behavior(void)
> */
> void ksys_sync(void)
> {
> - int nowait = 0, wait = 1;
> + struct sync_arg sarg;
>
> if (ve_fsync_behavior() == FSYNC_NEVER)
> return;
>
> wakeup_flusher_threads(WB_REASON_SYNC);
> iterate_supers(sync_inodes_one_sb, NULL);
> - iterate_supers(sync_fs_one_sb, &nowait);
> - iterate_supers(sync_fs_one_sb, &wait);
> + sarg.wait = 0;
> + iterate_supers(sync_fs_one_sb, &sarg);
> + sarg.wait = 1;
> + iterate_supers(sync_fs_one_sb, &sarg);
> iterate_bdevs(fdatawrite_one_bdev, NULL);
> iterate_bdevs(fdatawait_one_bdev, NULL);
> if (unlikely(laptop_mode))
> @@ -143,17 +151,19 @@ SYSCALL_DEFINE0(sync)
>
> static void do_sync_work(struct work_struct *work)
> {
> - int nowait = 0;
> + struct sync_arg sarg;
> +
> + sarg.wait = 0;
>
> /*
> * Sync twice to reduce the possibility we skipped some inodes / pages
> * because they were temporarily locked
> */
> - iterate_supers(sync_inodes_one_sb, &nowait);
> - iterate_supers(sync_fs_one_sb, &nowait);
> + iterate_supers(sync_inodes_one_sb, &sarg);
> + iterate_supers(sync_fs_one_sb, &sarg);
> iterate_bdevs(fdatawrite_one_bdev, NULL);
> - iterate_supers(sync_inodes_one_sb, &nowait);
> - iterate_supers(sync_fs_one_sb, &nowait);
> + iterate_supers(sync_inodes_one_sb, &sarg);
> + iterate_supers(sync_fs_one_sb, &sarg);
> iterate_bdevs(fdatawrite_one_bdev, NULL);
> printk("Emergency Sync complete\n");
> kfree(work);
>
More information about the Devel
mailing list