[Devel] [PATCH vz9 3/4] fs: sync: introduce argument struct for helper routines
Nikita Yushchenko
nikita.yushchenko at virtuozzo.com
Wed Dec 8 18:29:39 MSK 2021
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>
---
fs/sync.c | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/fs/sync.c b/fs/sync.c
index cca10ec7a90f..91a764988f41 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);
--
2.30.2
More information about the Devel
mailing list