]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
gfs2: Always mark inode dirty in fallocate
authorAndreas Gruenbacher <agruenba@redhat.com>
Thu, 8 Aug 2019 18:29:54 +0000 (19:29 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Tue, 3 Sep 2019 07:41:42 +0000 (09:41 +0200)
When allocating space with fallocate, always update the file timestamps
and mark the inode dirty, no matter if the FALLOC_FL_KEEP_SIZE flag is
set or not.  The inode needs to be marked dirty so that a subsequent
fsync will pick it up and any new allocations will make it to disk.
Filesystems like xfs and ext4 always update the timestamps, so make
gfs2 behave the same way.

Fixes xfstest generic/483.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/file.c

index 52fa1ef8400b82440d7a4c0bb9367a0b75e3bdbc..99e2c8cd5eaae73b222e47f891a473ee7423c16b 100644 (file)
@@ -1065,11 +1065,10 @@ static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t
                gfs2_quota_unlock(ip);
        }
 
-       if (!(mode & FALLOC_FL_KEEP_SIZE) && (pos + count) > inode->i_size) {
+       if (!(mode & FALLOC_FL_KEEP_SIZE) && (pos + count) > inode->i_size)
                i_size_write(inode, pos + count);
-               file_update_time(file);
-               mark_inode_dirty(inode);
-       }
+       file_update_time(file);
+       mark_inode_dirty(inode);
 
        if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
                return vfs_fsync_range(file, pos, pos + count - 1,