]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
exfat: fix timing of synchronizing bitmap and inode
authorYuezhang Mo <Yuezhang.Mo@sony.com>
Sun, 31 Mar 2024 14:38:17 +0000 (23:38 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Sun, 31 Mar 2024 14:39:29 +0000 (23:39 +0900)
Commit(f55c096f62f1 exfat: do not zero the extended part) changed
the timing of synchronizing bitmap and inode in exfat_cont_expand().
The change caused xfstests generic/013 to fail if 'dirsync' or 'sync'
is enabled. So this commit restores the timing.

Fixes: f55c096f62f1 ("exfat: do not zero the extended part")
Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/file.c

index cc00f1a7a1e18082af9e0e8ff28f5995de75f1ba..9adfc38ca7dac01ee004315a7b5d11486ee20f10 100644 (file)
@@ -51,7 +51,7 @@ static int exfat_cont_expand(struct inode *inode, loff_t size)
        clu.flags = ei->flags;
 
        ret = exfat_alloc_cluster(inode, new_num_clusters - num_clusters,
-                       &clu, IS_DIRSYNC(inode));
+                       &clu, inode_needs_sync(inode));
        if (ret)
                return ret;
 
@@ -77,12 +77,11 @@ out:
        ei->i_size_aligned = round_up(size, sb->s_blocksize);
        ei->i_size_ondisk = ei->i_size_aligned;
        inode->i_blocks = round_up(size, sbi->cluster_size) >> 9;
+       mark_inode_dirty(inode);
 
-       if (IS_DIRSYNC(inode))
+       if (IS_SYNC(inode))
                return write_inode_now(inode, 1);
 
-       mark_inode_dirty(inode);
-
        return 0;
 
 free_clu: