[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220914174015.7158-1-gianfranco.dutka@arista.com>
Date: Wed, 14 Sep 2022 10:40:14 -0700
From: Gianfranco <gianfranco.dutka@...sta.com>
To: hirofumi@...l.parknet.co.jp
Cc: gianfranco.dutka@...sta.com, linux-kernel@...r.kernel.org
Subject: [PATCH] fat: device-level-flush-after-sync
This patch forces a device-level flush after the generic Linux
code for sync has run.
The kernel depends upon filesystem-specific code to flush when
the filesystem itself thinks it is necessary, and otherwise
does nothing. Someone expecting sync to behave as expected
might be in for a rude surprise.
The usual caveats apply: Devices that do not implement flush
or whose implementation is buggy will not behave well. IO
that occurs after the sync will not be flushed.
Signed-off-by: Ken Kofman <gianfranco.dutka@...sta.com>
---
fs/fat/inode.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index a38238d75c08..ddaed94ee48f 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -823,6 +823,14 @@ static int fat_remount(struct super_block *sb, int *flags, char *data)
return 0;
}
+static int fat_sync_fs(struct super_block *sb, int wait)
+{
+ if (wait)
+ return blkdev_issue_flush(sb->s_bdev, GFP_KERNEL, NULL);
+ else
+ return 0;
+}
+
static int fat_statfs(struct dentry *dentry, struct kstatfs *buf)
{
struct super_block *sb = dentry->d_sb;
@@ -937,6 +945,7 @@ static const struct super_operations fat_sops = {
.put_super = fat_put_super,
.statfs = fat_statfs,
.remount_fs = fat_remount,
+ .sync_fs = fat_sync_fs,
.show_options = fat_show_options,
};
--
2.37.0
Powered by blists - more mailing lists