bcachefs: Ensure that fpunch updates inode timestamps
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 28 Apr 2021 23:36:12 +0000 (19:36 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:02 +0000 (17:09 -0400)
Fixes xfstests generic/059

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs-io.c
fs/bcachefs/fs.c

index a7cd85647354fe5dd09b39f0c43982145d0c9cdd..fbf171a4c1914308e373a5b69c39725128da7de3 100644 (file)
@@ -2407,6 +2407,15 @@ err:
 
 /* fallocate: */
 
+static int inode_update_times_fn(struct bch_inode_info *inode,
+                                struct bch_inode_unpacked *bi, void *p)
+{
+       struct bch_fs *c = inode->v.i_sb->s_fs_info;
+
+       bi->bi_mtime = bi->bi_ctime = bch2_current_time(c);
+       return 0;
+}
+
 static long bchfs_fpunch(struct bch_inode_info *inode, loff_t offset, loff_t len)
 {
        struct bch_fs *c = inode->v.i_sb->s_fs_info;
@@ -2444,6 +2453,11 @@ static long bchfs_fpunch(struct bch_inode_info *inode, loff_t offset, loff_t len
                                  &i_sectors_delta);
                i_sectors_acct(c, inode, NULL, i_sectors_delta);
        }
+
+       mutex_lock(&inode->ei_update_lock);
+       ret = bch2_write_inode(c, inode, inode_update_times_fn, NULL,
+                              ATTR_MTIME|ATTR_CTIME) ?: ret;
+       mutex_unlock(&inode->ei_update_lock);
 err:
        bch2_pagecache_block_put(&inode->ei_pagecache_lock);
        inode_unlock(&inode->v);
index 77db405e3418ea0b9a629ed614dafb75cb92a587..67e9a354ad372c3cc0365fc87b56e2fa4efab103 100644 (file)
@@ -145,7 +145,7 @@ int __must_check bch2_write_inode(struct bch_fs *c,
        struct bch_inode_unpacked inode_u;
        int ret;
 
-       bch2_trans_init(&trans, c, 0, 0);
+       bch2_trans_init(&trans, c, 0, 256);
 retry:
        bch2_trans_begin(&trans);