exfat: remove call ilog2() from exfat_readdir()
authorYuezhang Mo <Yuezhang.Mo@sony.com>
Tue, 16 Aug 2022 08:55:06 +0000 (16:55 +0800)
committerNamjae Jeon <linkinjeon@kernel.org>
Mon, 12 Dec 2022 02:02:50 +0000 (11:02 +0900)
There is no need to call ilog2() for the conversions between
cluster and dentry in exfat_readdir(), because these conversions
can be replaced with EXFAT_DEN_TO_CLU()/EXFAT_CLU_TO_DEN().

Code refinement, no functional changes.

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: Sungjong Seo <sj1557.seo@samsung.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/exfat/dir.c
fs/exfat/exfat_fs.h

index c05493f..397ea2d 100644 (file)
@@ -61,7 +61,7 @@ static void exfat_get_uniname_from_ext_entry(struct super_block *sb,
 /* read a directory entry from the opened directory */
 static int exfat_readdir(struct inode *inode, loff_t *cpos, struct exfat_dir_entry *dir_entry)
 {
-       int i, dentries_per_clu, dentries_per_clu_bits = 0, num_ext;
+       int i, dentries_per_clu, num_ext;
        unsigned int type, clu_offset, max_dentries;
        struct exfat_chain dir, clu;
        struct exfat_uni_name uni_name;
@@ -83,11 +83,10 @@ static int exfat_readdir(struct inode *inode, loff_t *cpos, struct exfat_dir_ent
                        EXFAT_B_TO_CLU(i_size_read(inode), sbi), ei->flags);
 
        dentries_per_clu = sbi->dentries_per_clu;
-       dentries_per_clu_bits = ilog2(dentries_per_clu);
        max_dentries = (unsigned int)min_t(u64, MAX_EXFAT_DENTRIES,
-                                          (u64)sbi->num_clusters << dentries_per_clu_bits);
+                               (u64)EXFAT_CLU_TO_DEN(sbi->num_clusters, sbi));
 
-       clu_offset = dentry >> dentries_per_clu_bits;
+       clu_offset = EXFAT_DEN_TO_CLU(dentry, sbi);
        exfat_chain_dup(&clu, &dir);
 
        if (clu.flags == ALLOC_NO_FAT_CHAIN) {
@@ -162,7 +161,7 @@ static int exfat_readdir(struct inode *inode, loff_t *cpos, struct exfat_dir_ent
                        dir_entry->entry = dentry;
                        brelse(bh);
 
-                       ei->hint_bmap.off = dentry >> dentries_per_clu_bits;
+                       ei->hint_bmap.off = EXFAT_DEN_TO_CLU(dentry, sbi);
                        ei->hint_bmap.clu = clu.dir;
 
                        *cpos = EXFAT_DEN_TO_B(dentry + 1 + num_ext);
index 324acc5..37e8af8 100644 (file)
@@ -101,12 +101,18 @@ enum {
 /*
  * helpers for block size to dentry size conversion.
  */
-#define EXFAT_B_TO_DEN_IDX(b, sbi)     \
-       ((b) << ((sbi)->cluster_size_bits - DENTRY_SIZE_BITS))
 #define EXFAT_B_TO_DEN(b)              ((b) >> DENTRY_SIZE_BITS)
 #define EXFAT_DEN_TO_B(b)              ((b) << DENTRY_SIZE_BITS)
 
 /*
+ * helpers for cluster size to dentry size conversion.
+ */
+#define EXFAT_CLU_TO_DEN(clu, sbi)     \
+       ((clu) << ((sbi)->cluster_size_bits - DENTRY_SIZE_BITS))
+#define EXFAT_DEN_TO_CLU(dentry, sbi)  \
+       ((dentry) >> ((sbi)->cluster_size_bits - DENTRY_SIZE_BITS))
+
+/*
  * helpers for fat entry.
  */
 #define FAT_ENT_SIZE (4)