[RFC PATCH 02/11] vfs: add a new errseq_t pointer to sync_fs prototype

From: Jeff Layton
Date: Fri May 18 2018 - 07:41:14 EST


From: Jeff Layton <jlayton@xxxxxxxxxx>

Plumb a new "since" pointer into the ->sync_fs operation. This will
eventually allow us to pass in an optional pointer to an errseq_t to
act as a cursor for error reporting.

For now it's ignored and all of the callers pass in NULL.

Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
fs/affs/super.c | 2 +-
fs/btrfs/ctree.h | 2 +-
fs/btrfs/ioctl.c | 2 +-
fs/btrfs/super.c | 2 +-
fs/ceph/super.c | 2 +-
fs/exofs/super.c | 2 +-
fs/ext2/super.c | 8 ++++----
fs/ext4/super.c | 4 ++--
fs/f2fs/f2fs.h | 2 +-
fs/f2fs/file.c | 6 +++---
fs/f2fs/namei.c | 16 ++++++++--------
fs/f2fs/segment.c | 2 +-
fs/f2fs/super.c | 4 ++--
fs/gfs2/super.c | 2 +-
fs/hfs/super.c | 2 +-
fs/hfsplus/super.c | 8 ++++----
fs/jffs2/super.c | 2 +-
fs/jfs/super.c | 2 +-
fs/nilfs2/super.c | 2 +-
fs/ocfs2/super.c | 4 ++--
fs/overlayfs/super.c | 2 +-
fs/quota/dquot.c | 4 ++--
fs/reiserfs/super.c | 4 ++--
fs/sync.c | 4 ++--
fs/sysv/inode.c | 2 +-
fs/ubifs/super.c | 2 +-
fs/udf/super.c | 4 ++--
fs/ufs/super.c | 4 ++--
fs/xfs/xfs_super.c | 3 ++-
include/linux/fs.h | 7 ++++---
30 files changed, 57 insertions(+), 55 deletions(-)

diff --git a/fs/affs/super.c b/fs/affs/super.c
index b76af8e3c87d..b85a10a930b4 100644
--- a/fs/affs/super.c
+++ b/fs/affs/super.c
@@ -55,7 +55,7 @@ affs_put_super(struct super_block *sb)
}

static int
-affs_sync_fs(struct super_block *sb, int wait)
+affs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
affs_commit_super(sb, wait);
return __sync_blockdev(sb->s_bdev, wait);
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 2771cc56a622..58f1058a9012 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3316,7 +3316,7 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info);
/* super.c */
int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
unsigned long new_flags);
-int btrfs_sync_fs(struct super_block *sb, int wait);
+int btrfs_sync_fs(struct super_block *sb, int wait, errseq_t *since);

static inline __printf(2, 3) __cold
void btrfs_no_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 632e26d6f7ce..ed3bfd89d8c9 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -5500,7 +5500,7 @@ long btrfs_ioctl(struct file *file, unsigned int
ret = btrfs_start_delalloc_roots(fs_info, 0, -1);
if (ret)
return ret;
- ret = btrfs_sync_fs(inode->i_sb, 1);
+ ret = btrfs_sync_fs(inode->i_sb, 1, NULL);
/*
* The transaction thread may want to do more work,
* namely it pokes the cleaner kthread that will start
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 0628092b0b1b..4a404c07acee 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -1226,7 +1226,7 @@ static int btrfs_fill_super(struct super_block *sb,
return err;
}

-int btrfs_sync_fs(struct super_block *sb, int wait)
+int btrfs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct btrfs_trans_handle *trans;
struct btrfs_fs_info *fs_info = btrfs_sb(sb);
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index b33082e6878f..f8711d572743 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -103,7 +103,7 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
}


-static int ceph_sync_fs(struct super_block *sb, int wait)
+static int ceph_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct ceph_fs_client *fsc = ceph_sb_to_client(sb);

diff --git a/fs/exofs/super.c b/fs/exofs/super.c
index 179cd5c2f52a..2c40233f5dc7 100644
--- a/fs/exofs/super.c
+++ b/fs/exofs/super.c
@@ -364,7 +364,7 @@ static const struct export_operations exofs_export_ops;
/*
* Write the superblock to the OSD
*/
-static int exofs_sync_fs(struct super_block *sb, int wait)
+static int exofs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct exofs_sb_info *sbi;
struct exofs_fscb *fscb;
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index fd8536bc13da..0366897bf02e 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -41,7 +41,7 @@
static void ext2_write_super(struct super_block *sb);
static int ext2_remount (struct super_block * sb, int * flags, char * data);
static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf);
-static int ext2_sync_fs(struct super_block *sb, int wait);
+static int ext2_sync_fs(struct super_block *sb, int wait, errseq_t *since);
static int ext2_freeze(struct super_block *sb);
static int ext2_unfreeze(struct super_block *sb);

@@ -1262,7 +1262,7 @@ void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es,
* may have been checked while mounted and e2fsck may have
* set s_state to EXT2_VALID_FS after some corrections.
*/
-static int ext2_sync_fs(struct super_block *sb, int wait)
+static int ext2_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct ext2_sb_info *sbi = EXT2_SB(sb);
struct ext2_super_block *es = EXT2_SB(sb)->s_es;
@@ -1293,7 +1293,7 @@ static int ext2_freeze(struct super_block *sb)
* consistent.
*/
if (atomic_long_read(&sb->s_remove_count)) {
- ext2_sync_fs(sb, 1);
+ ext2_sync_fs(sb, 1, NULL);
return 0;
}
/* Set EXT2_FS_VALID flag */
@@ -1316,7 +1316,7 @@ static int ext2_unfreeze(struct super_block *sb)
static void ext2_write_super(struct super_block *sb)
{
if (!sb_rdonly(sb))
- ext2_sync_fs(sb, 1);
+ ext2_sync_fs(sb, 1, NULL);
}

static int ext2_remount (struct super_block * sb, int * flags, char * data)
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index ac2ffdbf54e6..e2b4956969b8 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -69,7 +69,7 @@ static void ext4_mark_recovery_complete(struct super_block *sb,
struct ext4_super_block *es);
static void ext4_clear_journal_err(struct super_block *sb,
struct ext4_super_block *es);
-static int ext4_sync_fs(struct super_block *sb, int wait);
+static int ext4_sync_fs(struct super_block *sb, int wait, errseq_t *since);
static int ext4_remount(struct super_block *sb, int *flags, char *data);
static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
static int ext4_unfreeze(struct super_block *sb);
@@ -4855,7 +4855,7 @@ int ext4_force_commit(struct super_block *sb)
return ext4_journal_force_commit(journal);
}

-static int ext4_sync_fs(struct super_block *sb, int wait)
+static int ext4_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
int ret = 0, ret2;
tid_t target;
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 1df7f10476d6..9a4356a1f3d4 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2703,7 +2703,7 @@ void f2fs_inode_synced(struct inode *inode);
int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
void f2fs_quota_off_umount(struct super_block *sb);
int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
-int f2fs_sync_fs(struct super_block *sb, int sync);
+int f2fs_sync_fs(struct super_block *sb, int sync, errseq_t *since);
extern __printf(3, 4)
void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...);
int sanity_check_ckpt(struct f2fs_sb_info *sbi);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 6b94f19b3fa8..a6c9e47b2729 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -260,7 +260,7 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,

if (cp_reason) {
/* all the dirty node pages should be flushed for POR */
- ret = f2fs_sync_fs(inode->i_sb, 1);
+ ret = f2fs_sync_fs(inode->i_sb, 1, NULL);

/*
* We've secured consistency through sync_fs. Following pino
@@ -1869,7 +1869,7 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
break;
case F2FS_GOING_DOWN_METASYNC:
/* do checkpoint only */
- ret = f2fs_sync_fs(sb, 1);
+ ret = f2fs_sync_fs(sb, 1, NULL);
if (ret)
goto out;
f2fs_stop_checkpoint(sbi, false);
@@ -2097,7 +2097,7 @@ static int f2fs_ioc_write_checkpoint(struct file *filp, unsigned long arg)
if (ret)
return ret;

- ret = f2fs_sync_fs(sbi->sb, 1);
+ ret = f2fs_sync_fs(sbi->sb, 1, NULL);

mnt_drop_write_file(filp);
return ret;
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index d5098efe577c..62a3082ca6b6 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -298,7 +298,7 @@ static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
unlock_new_inode(inode);

if (IS_DIRSYNC(dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);

f2fs_balance_fs(sbi, true);
return 0;
@@ -345,7 +345,7 @@ static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
d_instantiate(dentry, inode);

if (IS_DIRSYNC(dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);
return 0;
out:
clear_inode_flag(inode, FI_INC_LINK);
@@ -531,7 +531,7 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
f2fs_unlock_op(sbi);

if (IS_DIRSYNC(dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);
fail:
trace_f2fs_unlink_exit(inode, err);
return err;
@@ -614,7 +614,7 @@ static int f2fs_symlink(struct inode *dir, struct dentry *dentry,
disk_link.len - 1);

if (IS_DIRSYNC(dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);
} else {
f2fs_unlink(dir, dentry);
}
@@ -665,7 +665,7 @@ static int f2fs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
unlock_new_inode(inode);

if (IS_DIRSYNC(dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);

f2fs_balance_fs(sbi, true);
return 0;
@@ -717,7 +717,7 @@ static int f2fs_mknod(struct inode *dir, struct dentry *dentry,
unlock_new_inode(inode);

if (IS_DIRSYNC(dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);

f2fs_balance_fs(sbi, true);
return 0;
@@ -979,7 +979,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
f2fs_unlock_op(sbi);

if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);
return 0;

put_out_dir:
@@ -1132,7 +1132,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
f2fs_unlock_op(sbi);

if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
- f2fs_sync_fs(sbi->sb, 1);
+ f2fs_sync_fs(sbi->sb, 1, NULL);
return 0;
out_new_dir:
if (new_dir_entry) {
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 5854cc4e1d67..d49bb295e0c6 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -507,7 +507,7 @@ void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi)
sync_dirty_inodes(sbi, FILE_INODE);
blk_finish_plug(&plug);
}
- f2fs_sync_fs(sbi->sb, true);
+ f2fs_sync_fs(sbi->sb, 1, NULL);
stat_inc_bg_cp_count(sbi->stat_info);
}
}
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 70fb16aac0bd..f5f6dc90a700 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1055,7 +1055,7 @@ static void f2fs_put_super(struct super_block *sb)
kfree(sbi);
}

-int f2fs_sync_fs(struct super_block *sb, int sync)
+int f2fs_sync_fs(struct super_block *sb, int sync, errseq_t *since)
{
struct f2fs_sb_info *sbi = F2FS_SB(sb);
int err = 0, err2;
@@ -1497,7 +1497,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)

set_sbi_flag(sbi, SBI_IS_DIRTY);
set_sbi_flag(sbi, SBI_IS_CLOSE);
- f2fs_sync_fs(sb, 1);
+ f2fs_sync_fs(sb, 1, NULL);
clear_sbi_flag(sbi, SBI_IS_CLOSE);
}

diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index 884dd8b7d7b3..f5a9f2fe7d7a 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -949,7 +949,7 @@ static void gfs2_put_super(struct super_block *sb)
* Flushes the log to disk.
*/

-static int gfs2_sync_fs(struct super_block *sb, int wait)
+static int gfs2_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
int bderr;
struct gfs2_sbd *sdp = sb->s_fs_info;
diff --git a/fs/hfs/super.c b/fs/hfs/super.c
index 9cb410ebab7c..f8c9b745e33f 100644
--- a/fs/hfs/super.c
+++ b/fs/hfs/super.c
@@ -30,7 +30,7 @@ static struct kmem_cache *hfs_inode_cachep;

MODULE_LICENSE("GPL");

-static int hfs_sync_fs(struct super_block *sb, int wait)
+static int hfs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
hfs_mdb_commit(sb);
return __sync_blockdev(sb->s_bdev, wait);
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
index 513c357c734b..93f0e96527cf 100644
--- a/fs/hfsplus/super.c
+++ b/fs/hfsplus/super.c
@@ -172,7 +172,7 @@ static void hfsplus_evict_inode(struct inode *inode)
}
}

-static int hfsplus_sync_fs(struct super_block *sb, int wait)
+static int hfsplus_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb);
struct hfsplus_vh *vhdr = sbi->s_vhdr;
@@ -254,7 +254,7 @@ static void delayed_sync_fs(struct work_struct *work)
sbi->work_queued = 0;
spin_unlock(&sbi->work_lock);

- err = hfsplus_sync_fs(sbi->alloc_file->i_sb, 1);
+ err = hfsplus_sync_fs(sbi->alloc_file->i_sb, 1, NULL);
if (err)
pr_err("delayed sync fs err %d\n", err);
}
@@ -291,7 +291,7 @@ static void hfsplus_put_super(struct super_block *sb)
vhdr->attributes |= cpu_to_be32(HFSPLUS_VOL_UNMNT);
vhdr->attributes &= cpu_to_be32(~HFSPLUS_VOL_INCNSTNT);

- hfsplus_sync_fs(sb, 1);
+ hfsplus_sync_fs(sb, 1, NULL);
}

hfs_btree_close(sbi->attr_tree);
@@ -545,7 +545,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
be32_add_cpu(&vhdr->write_count, 1);
vhdr->attributes &= cpu_to_be32(~HFSPLUS_VOL_UNMNT);
vhdr->attributes |= cpu_to_be32(HFSPLUS_VOL_INCNSTNT);
- hfsplus_sync_fs(sb, 1);
+ hfsplus_sync_fs(sb, 1, NULL);

if (!sbi->hidden_dir) {
mutex_lock(&sbi->vh_mutex);
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index 87bdf0f4cba1..ce773153c1a0 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -96,7 +96,7 @@ static int jffs2_show_options(struct seq_file *s, struct dentry *root)
return 0;
}

-static int jffs2_sync_fs(struct super_block *sb, int wait)
+static int jffs2_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);

diff --git a/fs/jfs/super.c b/fs/jfs/super.c
index c4b99ad53f9c..722b786731d6 100644
--- a/fs/jfs/super.c
+++ b/fs/jfs/super.c
@@ -703,7 +703,7 @@ static struct dentry *jfs_do_mount(struct file_system_type *fs_type,
return mount_bdev(fs_type, flags, dev_name, data, jfs_fill_super);
}

-static int jfs_sync_fs(struct super_block *sb, int wait)
+static int jfs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct jfs_log *log = JFS_SBI(sb)->log;

diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 280a28b62d13..4588ca0c7589 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -491,7 +491,7 @@ static void nilfs_put_super(struct super_block *sb)
sb->s_fs_info = NULL;
}

-static int nilfs_sync_fs(struct super_block *sb, int wait)
+static int nilfs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct the_nilfs *nilfs = sb->s_fs_info;
struct nilfs_super_block **sbp;
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 07a1a297c2ed..5eac259e3899 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -115,7 +115,7 @@ static void ocfs2_delete_osb(struct ocfs2_super *osb);

static int ocfs2_statfs(struct dentry *dentry, struct kstatfs *buf);

-static int ocfs2_sync_fs(struct super_block *sb, int wait);
+static int ocfs2_sync_fs(struct super_block *sb, int wait, errseq_t *since);

static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb);
static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb);
@@ -406,7 +406,7 @@ static const struct file_operations ocfs2_osb_debug_fops = {
.llseek = generic_file_llseek,
};

-static int ocfs2_sync_fs(struct super_block *sb, int wait)
+static int ocfs2_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
int status;
tid_t target;
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index e8551c97de51..f660e0e8430d 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -266,7 +266,7 @@ static void ovl_put_super(struct super_block *sb)
}

/* Sync real dirty inodes in upper filesystem (if it exists) */
-static int ovl_sync_fs(struct super_block *sb, int wait)
+static int ovl_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct ovl_fs *ofs = sb->s_fs_info;
struct super_block *upper_sb;
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
index 96522760826c..e9cafa4766c5 100644
--- a/fs/quota/dquot.c
+++ b/fs/quota/dquot.c
@@ -686,7 +686,7 @@ int dquot_quota_sync(struct super_block *sb, int type)
/* This is not very clever (and fast) but currently I don't know about
* any other simple way of getting quota data to disk and we must get
* them there for userspace to be visible... */
- call_sync_fs(sb, 1);
+ call_sync_fs(sb, 1, NULL);

/*
* Now when everything is written we can discard the pagecache so
@@ -2243,7 +2243,7 @@ int dquot_disable(struct super_block *sb, int type, unsigned int flags)

/* Sync the superblock so that buffers with quota data are written to
* disk (and so userspace sees correct data afterwards). */
- call_sync_fs(sb, 1);
+ call_sync_fs(sb, 1, NULL);

/* Now the quota files are just ordinary files and we can set the
* inode flags back. Moreover we discard the pagecache so that
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
index b3a390eab9b7..490f5bca544e 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
@@ -64,7 +64,7 @@ static int is_any_reiserfs_magic_string(struct reiserfs_super_block *rs)
static int reiserfs_remount(struct super_block *s, int *flags, char *data);
static int reiserfs_statfs(struct dentry *dentry, struct kstatfs *buf);

-static int reiserfs_sync_fs(struct super_block *s, int wait)
+static int reiserfs_sync_fs(struct super_block *s, int wait, errseq_t *since)
{
struct reiserfs_transaction_handle th;

@@ -108,7 +108,7 @@ static void flush_old_commits(struct work_struct *work)
sbi->work_queued = 0;
spin_unlock(&sbi->old_work_lock);

- reiserfs_sync_fs(s, 1);
+ reiserfs_sync_fs(s, 1, NULL);
up_read(&s->s_umount);
}

diff --git a/fs/sync.c b/fs/sync.c
index 44cdb38a8b67..b512c85bc9c5 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -35,7 +35,7 @@ static int __sync_filesystem(struct super_block *sb, int wait)
else
writeback_inodes_sb(sb, WB_REASON_SYNC);

- return call_sync_fs(sb, wait);
+ return call_sync_fs(sb, wait, NULL);
}

/*
@@ -78,7 +78,7 @@ static void sync_fs_one_sb(struct super_block *sb, void *arg)

if (sb_rdonly(sb))
return;
- call_sync_fs(sb, wait);
+ call_sync_fs(sb, wait, NULL);
}

static void fdatawrite_one_bdev(struct block_device *bdev, void *arg)
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c
index 2232cf97840b..f202f3d73772 100644
--- a/fs/sysv/inode.c
+++ b/fs/sysv/inode.c
@@ -32,7 +32,7 @@
#include <asm/byteorder.h>
#include "sysv.h"

-static int sysv_sync_fs(struct super_block *sb, int wait)
+static int sysv_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct sysv_sb_info *sbi = SYSV_SB(sb);
unsigned long time = get_seconds(), old_time;
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index 6c397a389105..4faaf6f9fdbc 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -449,7 +449,7 @@ static int ubifs_show_options(struct seq_file *s, struct dentry *root)
return 0;
}

-static int ubifs_sync_fs(struct super_block *sb, int wait)
+static int ubifs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
int i, err;
struct ubifs_info *c = sb->s_fs_info;
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 7949c338efa5..12cdc9d5acf0 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -89,7 +89,7 @@ enum { UDF_MAX_LINKS = 0xffff };
/* These are the "meat" - everything else is stuffing */
static int udf_fill_super(struct super_block *, void *, int);
static void udf_put_super(struct super_block *);
-static int udf_sync_fs(struct super_block *, int);
+static int udf_sync_fs(struct super_block *, int, errseq_t *);
static int udf_remount_fs(struct super_block *, int *, char *);
static void udf_load_logicalvolint(struct super_block *, struct kernel_extent_ad);
static int udf_find_fileset(struct super_block *, struct kernel_lb_addr *,
@@ -2345,7 +2345,7 @@ static void udf_put_super(struct super_block *sb)
sb->s_fs_info = NULL;
}

-static int udf_sync_fs(struct super_block *sb, int wait)
+static int udf_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct udf_sb_info *sbi = UDF_SB(sb);

diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index 8254b8b3690f..e3f26b566f11 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -680,7 +680,7 @@ static void ufs_put_super_internal(struct super_block *sb)
UFSD("EXIT\n");
}

-static int ufs_sync_fs(struct super_block *sb, int wait)
+static int ufs_sync_fs(struct super_block *sb, int wait, errseq_t *since)
{
struct ufs_sb_private_info * uspi;
struct ufs_super_block_first * usb1;
@@ -720,7 +720,7 @@ static void delayed_sync_fs(struct work_struct *work)
sbi->work_queued = 0;
spin_unlock(&sbi->work_lock);

- ufs_sync_fs(sbi->sb, 1);
+ ufs_sync_fs(sbi->sb, 1, NULL);
}

void ufs_mark_sb_dirty(struct super_block *sb)
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 8683f8f2666f..1ce4b936c716 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1089,7 +1089,8 @@ xfs_free_fsname(
STATIC int
xfs_fs_sync_fs(
struct super_block *sb,
- int wait)
+ int wait,
+ errseq_t *since)
{
struct xfs_mount *mp = XFS_M(sb);

diff --git a/include/linux/fs.h b/include/linux/fs.h
index 69b76f394954..258877074ff4 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1821,7 +1821,7 @@ struct super_operations {
int (*drop_inode) (struct inode *);
void (*evict_inode) (struct inode *);
void (*put_super) (struct super_block *);
- int (*sync_fs)(struct super_block *sb, int wait);
+ int (*sync_fs)(struct super_block *sb, int wait, errseq_t *since);
int (*freeze_super) (struct super_block *);
int (*freeze_fs) (struct super_block *);
int (*thaw_super) (struct super_block *);
@@ -2499,10 +2499,11 @@ extern const struct file_operations def_chr_fops;
* Many legacy filesystems don't have a sync_fs op. For them, we just flush
* the block device (if there is one).
*/
-static inline int call_sync_fs(struct super_block *sb, int wait)
+static inline int call_sync_fs(struct super_block *sb, int wait,
+ errseq_t *since)
{
if (sb->s_op->sync_fs)
- return sb->s_op->sync_fs(sb, wait);
+ return sb->s_op->sync_fs(sb, wait, since);
return __sync_blockdev(sb->s_bdev, wait);
}

--
2.17.0