fs: convert a pile of fsync routines to errseq_t based reporting
authorJeff Layton <jlayton@redhat.com>
Fri, 7 Jul 2017 19:20:52 +0000 (15:20 -0400)
committerJeff Layton <jlayton@redhat.com>
Tue, 1 Aug 2017 12:39:29 +0000 (08:39 -0400)
This patch converts most of the in-kernel filesystems that do writeback
out of the pagecache to report errors using the errseq_t-based
infrastructure that was recently added. This allows them to report
errors once for each open file description.

Most filesystems have a fairly straightforward fsync operation. They
call filemap_write_and_wait_range to write back all of the data and
wait on it, and then (sometimes) sync out the metadata.

For those filesystems this is a straightforward conversion from calling
filemap_write_and_wait_range in their fsync operation to calling
file_write_and_wait_range.

Acked-by: Jan Kara <jack@suse.cz>
Acked-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
22 files changed:
arch/powerpc/platforms/cell/spufs/file.c
drivers/staging/lustre/lustre/llite/file.c
drivers/video/fbdev/core/fb_defio.c
fs/9p/vfs_file.c
fs/affs/file.c
fs/afs/write.c
fs/cifs/file.c
fs/exofs/file.c
fs/f2fs/file.c
fs/hfs/inode.c
fs/hfsplus/inode.c
fs/hostfs/hostfs_kern.c
fs/hpfs/file.c
fs/jffs2/file.c
fs/jfs/file.c
fs/ncpfs/file.c
fs/ntfs/dir.c
fs/ntfs/file.c
fs/ocfs2/file.c
fs/reiserfs/dir.c
fs/reiserfs/file.c
fs/ubifs/file.c

index ae2f740a82f1493df8a2e8283271d6bb09ac8836..5ffcdeb1eb17680cf9a02771a8248ef62fae34e0 100644 (file)
@@ -1749,7 +1749,7 @@ out:
 static int spufs_mfc_fsync(struct file *file, loff_t start, loff_t end, int datasync)
 {
        struct inode *inode = file_inode(file);
-       int err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       int err = file_write_and_wait_range(file, start, end);
        if (!err) {
                inode_lock(inode);
                err = spufs_mfc_flush(file, NULL);
index ab1c85c1ed3896b1d2da0b84f0674dfe633a3a02..f7d07735ac6676eb9ddf86e70922b70be70cd7fb 100644 (file)
@@ -2364,7 +2364,7 @@ int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync)
               PFID(ll_inode2fid(inode)), inode);
        ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_FSYNC, 1);
 
-       rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       rc = file_write_and_wait_range(file, start, end);
        inode_lock(inode);
 
        /* catch async errors that were recorded back when async writeback
index 37f69c061210edf8a4b30799535555ed676fe2fd..487d5e336e1b6cdb9f1375577afbdb8fd8a8565d 100644 (file)
@@ -69,7 +69,7 @@ int fb_deferred_io_fsync(struct file *file, loff_t start, loff_t end, int datasy
 {
        struct fb_info *info = file->private_data;
        struct inode *inode = file_inode(file);
-       int err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       int err = file_write_and_wait_range(file, start, end);
        if (err)
                return err;
 
index 3de3b4a89d89a16a2f23b63a990f8959568583df..4802d75b3cf798143a7a44a6120402f9a2cb343b 100644 (file)
@@ -445,7 +445,7 @@ static int v9fs_file_fsync(struct file *filp, loff_t start, loff_t end,
        struct p9_wstat wstat;
        int retval;
 
-       retval = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       retval = file_write_and_wait_range(filp, start, end);
        if (retval)
                return retval;
 
@@ -468,7 +468,7 @@ int v9fs_file_fsync_dotl(struct file *filp, loff_t start, loff_t end,
        struct inode *inode = filp->f_mapping->host;
        int retval;
 
-       retval = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       retval = file_write_and_wait_range(filp, start, end);
        if (retval)
                return retval;
 
index 196ee7f6fdc40e45235178b55abbc54461fbbb49..00331810f69084162d08c1fff7272d47050e2a0a 100644 (file)
@@ -954,7 +954,7 @@ int affs_file_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
        struct inode *inode = filp->f_mapping->host;
        int ret, err;
 
-       err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       err = file_write_and_wait_range(filp, start, end);
        if (err)
                return err;
 
index 2d2fccd5044bcd9b02127246824c1221ec502484..106e43db11153fc1faed12ab326e25d4a9dc3c7d 100644 (file)
@@ -714,7 +714,7 @@ int afs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
               vnode->fid.vid, vnode->fid.vnode, file,
               datasync);
 
-       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       ret = file_write_and_wait_range(file, start, end);
        if (ret)
                return ret;
        inode_lock(inode);
index bc09df6b473ae309a693b1c6accaa5ff9c3b24de..0786f19d288f8e5e5defe2c7a97a26a88c646e87 100644 (file)
@@ -2329,7 +2329,7 @@ int cifs_strict_fsync(struct file *file, loff_t start, loff_t end,
        struct inode *inode = file_inode(file);
        struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
 
-       rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       rc = file_write_and_wait_range(file, start, end);
        if (rc)
                return rc;
        inode_lock(inode);
@@ -2371,7 +2371,7 @@ int cifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
        struct cifs_sb_info *cifs_sb = CIFS_FILE_SB(file);
        struct inode *inode = file->f_mapping->host;
 
-       rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       rc = file_write_and_wait_range(file, start, end);
        if (rc)
                return rc;
        inode_lock(inode);
index 28645f0640f735b7f168b14258cc22c110bc0f1d..a94594ea2aa346ecf5eb854f314041c51b2e9e23 100644 (file)
@@ -48,7 +48,7 @@ static int exofs_file_fsync(struct file *filp, loff_t start, loff_t end,
        struct inode *inode = filp->f_mapping->host;
        int ret;
 
-       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       ret = file_write_and_wait_range(filp, start, end);
        if (ret)
                return ret;
 
index a0e6d2c65a9ec013ed05a6a67ced7ca6995e9842..40fb3d4bb9c256cc6060644424d18a19f1498bfb 100644 (file)
@@ -206,7 +206,7 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
        /* if fdatasync is triggered, let's do in-place-update */
        if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
                set_inode_flag(inode, FI_NEED_IPU);
-       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       ret = file_write_and_wait_range(file, start, end);
        clear_inode_flag(inode, FI_NEED_IPU);
 
        if (ret) {
index bfbba799430f1575d6e80b21f2159fe0fbe5968a..2538b49cc349e969e0695b3373f7e22849528264 100644 (file)
@@ -656,7 +656,7 @@ static int hfs_file_fsync(struct file *filp, loff_t start, loff_t end,
        struct super_block * sb;
        int ret, err;
 
-       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       ret = file_write_and_wait_range(filp, start, end);
        if (ret)
                return ret;
        inode_lock(inode);
index e8638d528195196232cc858f77d664e4fe79044e..4f26b687713052286ad5baa98c7c7ca4cb61edc3 100644 (file)
@@ -283,7 +283,7 @@ int hfsplus_file_fsync(struct file *file, loff_t start, loff_t end,
        struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb);
        int error = 0, error2;
 
-       error = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       error = file_write_and_wait_range(file, start, end);
        if (error)
                return error;
        inode_lock(inode);
index e61261a7417e57cc49a784c5a54b8a15f92bd352..c148e7f4f45197181f0e4a8b4763ed1beae090c3 100644 (file)
@@ -374,7 +374,7 @@ static int hostfs_fsync(struct file *file, loff_t start, loff_t end,
        struct inode *inode = file->f_mapping->host;
        int ret;
 
-       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       ret = file_write_and_wait_range(file, start, end);
        if (ret)
                return ret;
 
index b3be1b5a62e213f0d8def5b5f4dd51d399567199..f26138425b16edec599f27df730b82b00fd8589c 100644 (file)
@@ -24,7 +24,7 @@ int hpfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
        struct inode *inode = file->f_mapping->host;
        int ret;
 
-       ret = filemap_write_and_wait_range(file->f_mapping, start, end);
+       ret = file_write_and_wait_range(file, start, end);
        if (ret)
                return ret;
        return sync_blockdev(inode->i_sb->s_bdev);
index c12476e309c67c26883d5d2ae95166595359d5ab..bd0428bebe9b7787089135ddc4094800f86882a0 100644 (file)
@@ -35,7 +35,7 @@ int jffs2_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
        struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
        int ret;
 
-       ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       ret = file_write_and_wait_range(filp, start, end);
        if (ret)
                return ret;
 
index 739492c7a3fd9b79b356053e778d9859694ae7fe..36665fd37095ede8da84292e245d4265cf52aabc 100644 (file)
@@ -34,7 +34,7 @@ int jfs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
        struct inode *inode = file->f_mapping->host;
        int rc = 0;
 
-       rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       rc = file_write_and_wait_range(file, start, end);
        if (rc)
                return rc;
 
index 76965e7722643ec63ced2e6071b0e7ec40561818..a06c07619ee660ca7cb8b4044a3b34e58741042b 100644 (file)
@@ -23,7 +23,7 @@
 
 static int ncp_fsync(struct file *file, loff_t start, loff_t end, int datasync)
 {
-       return filemap_write_and_wait_range(file->f_mapping, start, end);
+       return file_write_and_wait_range(file, start, end);
 }
 
 /*
index 0ee19ecc982d4e4ef8137836ba4d753559eb7612..1a24be9e8405d98a355de0bd5a7445ea4210c50e 100644 (file)
@@ -1506,7 +1506,7 @@ static int ntfs_dir_fsync(struct file *filp, loff_t start, loff_t end,
 
        ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
 
-       err = filemap_write_and_wait_range(vi->i_mapping, start, end);
+       err = file_write_and_wait_range(filp, start, end);
        if (err)
                return err;
        inode_lock(vi);
index c4f68c338735b909c163abb11b9d5c90df9fb71f..331910fa84422cc77fc14eaadfef5cb058c22cc7 100644 (file)
@@ -1989,7 +1989,7 @@ static int ntfs_file_fsync(struct file *filp, loff_t start, loff_t end,
 
        ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
 
-       err = filemap_write_and_wait_range(vi->i_mapping, start, end);
+       err = file_write_and_wait_range(filp, start, end);
        if (err)
                return err;
        inode_lock(vi);
index bfeb647459d95e6425edd63c3179b848e027c848..66e59d3163ea6d12d5e9a8b2992899daf1747df0 100644 (file)
@@ -196,7 +196,7 @@ static int ocfs2_sync_file(struct file *file, loff_t start, loff_t end,
        if (ocfs2_is_hard_readonly(osb) || ocfs2_is_soft_readonly(osb))
                return -EROFS;
 
-       err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       err = file_write_and_wait_range(file, start, end);
        if (err)
                return err;
 
index 45aa05e2232f9ad6e7a752e794b404377a8822d3..5b50689d853964dd40a71997c1968f9d4357070d 100644 (file)
@@ -34,7 +34,7 @@ static int reiserfs_dir_fsync(struct file *filp, loff_t start, loff_t end,
        struct inode *inode = filp->f_mapping->host;
        int err;
 
-       err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       err = file_write_and_wait_range(filp, start, end);
        if (err)
                return err;
 
index b396eb09f288864ae27ce6a65108fa1e6f819820..843aadcc123c2a12e04259e90dcc8dff2e779b03 100644 (file)
@@ -154,7 +154,7 @@ static int reiserfs_sync_file(struct file *filp, loff_t start, loff_t end,
        int err;
        int barrier_done;
 
-       err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       err = file_write_and_wait_range(filp, start, end);
        if (err)
                return err;
 
index 8cad0b19b404cc20be28835a6c99919fa2ef9aae..f90a466ea5db30bc1fcc05a3999d11eb2898727c 100644 (file)
@@ -1337,7 +1337,7 @@ int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync)
                 */
                return 0;
 
-       err = filemap_write_and_wait_range(inode->i_mapping, start, end);
+       err = file_write_and_wait_range(file, start, end);
        if (err)
                return err;
        inode_lock(inode);