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