exfat: remove duplicate write inode for extending dir/file
authorYuezhang Mo <Yuezhang.Mo@sony.com>
Wed, 29 Jun 2022 03:05:51 +0000 (11:05 +0800)
committerNamjae Jeon <linkinjeon@kernel.org>
Mon, 1 Aug 2022 01:14:06 +0000 (10:14 +0900)
Since the timestamps need to be updated, the directory entries
will be updated by mark_inode_dirty() whether or not a new
cluster is allocated for the file or directory, so there is no
need to use __exfat_write_inode() to update the directory entries
when allocating a new cluster for a file or directory.

Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
Reviewed-by: Andy Wu <Andy.Wu@sony.com>
Reviewed-by: Aoyama Wataru <wataru.aoyama@sony.com>
Reviewed-by: Daniel Palmer <daniel.palmer@sony.com>
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/inode.c
fs/exfat/namei.c

index 3acfbec..a795437 100644 (file)
@@ -112,7 +112,7 @@ void exfat_sync_inode(struct inode *inode)
 static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
                unsigned int *clu, int create)
 {
-       int ret, modified = false;
+       int ret;
        unsigned int last_clu;
        struct exfat_chain new_clu;
        struct super_block *sb = inode->i_sb;
@@ -203,7 +203,6 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
                        if (new_clu.flags == ALLOC_FAT_CHAIN)
                                ei->flags = ALLOC_FAT_CHAIN;
                        ei->start_clu = new_clu.dir;
-                       modified = true;
                } else {
                        if (new_clu.flags != ei->flags) {
                                /* no-fat-chain bit is disabled,
@@ -213,7 +212,6 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
                                exfat_chain_cont_cluster(sb, ei->start_clu,
                                        num_clusters);
                                ei->flags = ALLOC_FAT_CHAIN;
-                               modified = true;
                        }
                        if (new_clu.flags == ALLOC_FAT_CHAIN)
                                if (exfat_ent_set(sb, last_clu, new_clu.dir))
@@ -223,11 +221,6 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
                num_clusters += num_to_be_allocated;
                *clu = new_clu.dir;
 
-               if (modified) {
-                       if (__exfat_write_inode(inode, inode_needs_sync(inode)))
-                               return -EIO;
-               }
-
                inode->i_blocks +=
                        num_to_be_allocated << sbi->sect_per_clus_bits;
 
index d640f9d..7fac9c4 100644 (file)
@@ -388,10 +388,6 @@ static int exfat_find_empty_entry(struct inode *inode,
                ei->i_size_aligned += sbi->cluster_size;
                ei->flags = p_dir->flags;
                inode->i_blocks += 1 << sbi->sect_per_clus_bits;
-
-               /* update the directory entry */
-               if (__exfat_write_inode(inode, IS_DIRSYNC(inode)))
-                       return -EIO;
        }
 
        return dentry;