[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230919090933.25567-2-adilger@dilger.ca>
Date: Tue, 19 Sep 2023 03:09:32 -0600
From: Andreas Dilger <adilger@...ger.ca>
To: tytso@....edu
Cc: linux-ext4@...r.kernel.org, Andreas Dilger <adilger@...ger.ca>
Subject: [PATCH 6/7] misc: deduplicate log2/log10 functions
Remove duplicate log2() and log10() functions and replace them
with a single pair of functions ext2fs_log2() and ext2fs_log10().
Signed-off-by: Andreas Dilger <adilger@...ger.ca>
Change-Id: Ifc86efe7e5f0243eb914c6d24319cc7dee3ebbe5
---
debugfs/debugfs.c | 16 ++--------------
debugfs/filefrag.c | 18 +++---------------
lib/ext2fs/ext2fs.h | 24 ++++++++++++++++++++++++
lib/ext2fs/extent.c | 17 +++--------------
misc/e2freefrag.c | 20 ++++----------------
misc/e4crypt.c | 14 +-------------
misc/filefrag.c | 32 ++++----------------------------
misc/mk_hugefiles.c | 2 +-
misc/mke2fs.c | 35 +++++++----------------------------
misc/mke2fs.h | 1 -
10 files changed, 49 insertions(+), 130 deletions(-)
diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
index 742bf794..66428f7d 100644
--- a/debugfs/debugfs.c
+++ b/debugfs/debugfs.c
@@ -652,18 +652,6 @@ static void dump_blocks(FILE *f, const char *prefix, ext2_ino_t inode)
fprintf(f,"\n");
}
-static int int_log10(unsigned long long arg)
-{
- int l = 0;
-
- arg = arg / 10;
- while (arg) {
- l++;
- arg = arg / 10;
- }
- return l;
-}
-
#define DUMP_LEAF_EXTENTS 0x01
#define DUMP_NODE_EXTENTS 0x02
#define DUMP_EXTENT_TABLE 0x04
@@ -1065,11 +1053,11 @@ void do_dump_extents(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)),
return;
}
- logical_width = int_log10((EXT2_I_SIZE(&inode)+current_fs->blocksize-1)/
+ logical_width = ext2fs_log10((EXT2_I_SIZE(&inode)+current_fs->blocksize-1)/
current_fs->blocksize) + 1;
if (logical_width < 5)
logical_width = 5;
- physical_width = int_log10(ext2fs_blocks_count(current_fs->super)) + 1;
+ physical_width = ext2fs_log10(ext2fs_blocks_count(current_fs->super)) + 1;
if (physical_width < 5)
physical_width = 5;
diff --git a/debugfs/filefrag.c b/debugfs/filefrag.c
index 31c1440c..080c2c37 100644
--- a/debugfs/filefrag.c
+++ b/debugfs/filefrag.c
@@ -54,18 +54,6 @@ struct filefrag_struct {
struct dir_list *dir_list, *dir_last;
};
-static int int_log10(unsigned long long arg)
-{
- int l = 0;
-
- arg = arg / 10;
- while (arg) {
- l++;
- arg = arg / 10;
- }
- return l;
-}
-
static void print_header(struct filefrag_struct *fs)
{
if (fs->options & VERBOSE_OPT) {
@@ -135,8 +123,8 @@ static void filefrag(ext2_ino_t ino, struct ext2_inode *inode,
errcode_t retval;
int blocksize = current_fs->blocksize;
- fs->logical_width = int_log10((EXT2_I_SIZE(inode) + blocksize - 1) /
- blocksize) + 1;
+ fs->logical_width = ext2fs_log10((EXT2_I_SIZE(inode) + blocksize - 1) /
+ blocksize) + 1;
if (fs->logical_width < 7)
fs->logical_width = 7;
fs->ext = 0;
@@ -313,7 +301,7 @@ void do_filefrag(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)),
return;
fs.f = open_pager();
- fs.physical_width = int_log10(ext2fs_blocks_count(current_fs->super));
+ fs.physical_width = ext2fs_log10(ext2fs_blocks_count(current_fs->super));
fs.physical_width++;
if (fs.physical_width < 8)
fs.physical_width = 8;
diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h
index b5477c10..8e02d6b6 100644
--- a/lib/ext2fs/ext2fs.h
+++ b/lib/ext2fs/ext2fs.h
@@ -2119,6 +2119,30 @@ _INLINE_ int ext2fs_htree_intnode_maxrecs(ext2_filsys fs, int blocks)
sizeof(struct ext2_dx_entry));
}
+_INLINE_ int ext2fs_log2(unsigned long long arg)
+{
+ int l = 0;
+
+ arg >>= 1;
+ while (arg) {
+ l++;
+ arg >>= 1;
+ }
+ return l;
+}
+
+_INLINE_ int ext2fs_log10(unsigned long long arg)
+{
+ int l = 0;
+
+ arg /= 10;
+ while (arg) {
+ l++;
+ arg /= 10;
+ }
+ return l;
+}
+
/*
* This is an efficient, overflow safe way of calculating ceil((1.0 * a) / b)
*/
diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c
index 82e75ccd..f747a561 100644
--- a/lib/ext2fs/extent.c
+++ b/lib/ext2fs/extent.c
@@ -1720,18 +1720,6 @@ errcode_t ext2fs_extent_get_info(ext2_extent_handle_t handle,
return 0;
}
-static int ul_log2(unsigned long arg)
-{
- int l = 0;
-
- arg >>= 1;
- while (arg) {
- l++;
- arg >>= 1;
- }
- return l;
-}
-
size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle)
{
size_t iblock_sz = sizeof(((struct ext2_inode *)NULL)->i_block);
@@ -1746,8 +1734,9 @@ size_t ext2fs_max_extent_depth(ext2_extent_handle_t handle)
if (last_blocksize && last_blocksize == handle->fs->blocksize)
return last_result;
- last_result = 1 + ((ul_log2(EXT_MAX_EXTENT_LBLK) - ul_log2(iblock_extents)) /
- ul_log2(extents_per_block));
+ last_result = 1 + ((ext2fs_log2(EXT_MAX_EXTENT_LBLK) -
+ ext2fs_log2(iblock_extents)) /
+ ext2fs_log2(extents_per_block));
last_blocksize = handle->fs->blocksize;
return last_result;
}
diff --git a/misc/e2freefrag.c b/misc/e2freefrag.c
index 04f155b6..903789f0 100644
--- a/misc/e2freefrag.c
+++ b/misc/e2freefrag.c
@@ -57,28 +57,16 @@ static void usage(const char *prog)
#endif
}
-static int ul_log2(unsigned long arg)
-{
- int l = 0;
-
- arg >>= 1;
- while (arg) {
- l++;
- arg >>= 1;
- }
- return l;
-}
-
static void init_chunk_info(ext2_filsys fs, struct chunk_info *info)
{
int i;
- info->blocksize_bits = ul_log2((unsigned long)fs->blocksize);
+ info->blocksize_bits = ext2fs_log2(fs->blocksize);
if (info->chunkbytes) {
- info->chunkbits = ul_log2(info->chunkbytes);
+ info->chunkbits = ext2fs_log2(info->chunkbytes);
info->blks_in_chunk = info->chunkbytes >> info->blocksize_bits;
} else {
- info->chunkbits = ul_log2(DEFAULT_CHUNKSIZE);
+ info->chunkbits = ext2fs_log2(DEFAULT_CHUNKSIZE);
info->blks_in_chunk = DEFAULT_CHUNKSIZE >> info->blocksize_bits;
}
@@ -97,7 +85,7 @@ static void update_chunk_stats(struct chunk_info *info,
{
unsigned long idx;
- idx = ul_log2(chunk_size) + 1;
+ idx = ext2fs_log2(chunk_size) + 1;
if (idx >= MAX_HIST)
idx = MAX_HIST-1;
info->histogram.fc_chunks[idx]++;
diff --git a/misc/e4crypt.c b/misc/e4crypt.c
index 67d25d88..6f23927d 100644
--- a/misc/e4crypt.c
+++ b/misc/e4crypt.c
@@ -114,18 +114,6 @@ static const size_t hexchars_size = 16;
#define EXT4_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct ext4_encryption_policy)
#define EXT4_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct ext4_encryption_policy)
-static int int_log2(int arg)
-{
- int l = 0;
-
- arg >>= 1;
- while (arg) {
- l++;
- arg >>= 1;
- }
- return l;
-}
-
static void validate_paths(int argc, char *argv[], int path_start_index)
{
int x;
@@ -386,7 +374,7 @@ static void set_policy(struct salt *set_salt, int pad,
EXT4_ENCRYPTION_MODE_AES_256_XTS;
policy.filenames_encryption_mode =
EXT4_ENCRYPTION_MODE_AES_256_CTS;
- policy.flags = int_log2(pad >> 2);
+ policy.flags = ext2fs_log2(pad >> 2);
memcpy(policy.master_key_descriptor, salt->key_desc,
EXT4_KEY_DESCRIPTOR_SIZE);
rc = ioctl(fd, EXT4_IOC_SET_ENCRYPTION_POLICY, &policy);
diff --git a/misc/filefrag.c b/misc/filefrag.c
index eaaa90a8..13a533e5 100644
--- a/misc/filefrag.c
+++ b/misc/filefrag.c
@@ -76,30 +76,6 @@ const char *hex_fmt = "%4d: %*llx..%*llx: %*llx..%*llx: %6llx: %s\n";
#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
#define EXT3_IOC_GETFLAGS _IOR('f', 1, long)
-static int ulong_log2(unsigned long arg)
-{
- int l = 0;
-
- arg >>= 1;
- while (arg) {
- l++;
- arg >>= 1;
- }
- return l;
-}
-
-static int ulong_log10(unsigned long long arg)
-{
- int l = 0;
-
- arg = arg / 10;
- while (arg) {
- l++;
- arg = arg / 10;
- }
- return l;
-}
-
static unsigned int div_ceil(unsigned int a, unsigned int b)
{
if (!a)
@@ -483,20 +459,20 @@ static int frag_report(const char *filename)
}
last_device = st.st_dev;
- width = ulong_log10(fsinfo.f_blocks);
+ width = ext2fs_log10(fsinfo.f_blocks);
if (width > physical_width)
physical_width = width;
numblocks = (st.st_size + blksize - 1) / blksize;
if (blocksize != 0)
- blk_shift = ulong_log2(blocksize);
+ blk_shift = ext2fs_log2(blocksize);
else
- blk_shift = ulong_log2(blksize);
+ blk_shift = ext2fs_log2(blksize);
if (use_extent_cache)
width = 10;
else
- width = ulong_log10(numblocks);
+ width = ext2fs_log10(numblocks);
if (width > logical_width)
logical_width = width;
if (verbose) {
diff --git a/misc/mk_hugefiles.c b/misc/mk_hugefiles.c
index 3caaf1b6..17788bcd 100644
--- a/misc/mk_hugefiles.c
+++ b/misc/mk_hugefiles.c
@@ -417,7 +417,7 @@ errcode_t mk_hugefiles(ext2_filsys fs, const char *device_name)
fn_prefix = get_string_from_profile(fs_types, "hugefiles_name",
"hugefile");
idx_digits = get_int_from_profile(fs_types, "hugefiles_digits", 5);
- d = int_log10(num_files) + 1;
+ d = ext2fs_log10(num_files) + 1;
if (idx_digits > d)
d = idx_digits;
dsize = strlen(fn_prefix) + d + 16;
diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index ba5f179a..c6e26e70 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -144,27 +144,6 @@ static void usage(void)
exit(1);
}
-static int int_log2(unsigned long long arg)
-{
- int l = 0;
-
- arg >>= 1;
- while (arg) {
- l++;
- arg >>= 1;
- }
- return l;
-}
-
-int int_log10(unsigned long long arg)
-{
- int l;
-
- for (l=0; arg ; l++)
- arg = arg / 10;
- return l;
-}
-
#ifdef __linux__
static int parse_version_number(const char *s)
{
@@ -743,7 +722,7 @@ skip_details:
continue;
if (i != 1)
printf(", ");
- need = int_log10(group_block) + 2;
+ need = ext2fs_log10(group_block) + 2;
if (need > col_left) {
printf("\n\t");
col_left = 72;
@@ -1669,8 +1648,8 @@ profile_error:
blocksize);
if (blocksize > 0)
fs_param.s_log_block_size =
- int_log2(blocksize >>
- EXT2_MIN_BLOCK_LOG_SIZE);
+ ext2fs_log2(blocksize >>
+ EXT2_MIN_BLOCK_LOG_SIZE);
break;
case 'c': /* Check for bad blocks */
cflag++;
@@ -1949,7 +1928,7 @@ profile_error:
blocksize = jfs->blocksize;
printf(_("Using journal device's blocksize: %d\n"), blocksize);
fs_param.s_log_block_size =
- int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
+ ext2fs_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
ext2fs_close_free(&jfs);
}
@@ -2188,7 +2167,7 @@ profile_error:
}
fs_param.s_log_block_size =
- int_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
+ ext2fs_log2(blocksize >> EXT2_MIN_BLOCK_LOG_SIZE);
/*
* We now need to do a sanity check of fs_blocks_count for
@@ -2312,7 +2291,7 @@ profile_error:
"cluster_size",
blocksize*16);
fs_param.s_log_cluster_size =
- int_log2(cluster_size >> EXT2_MIN_CLUSTER_LOG_SIZE);
+ ext2fs_log2(cluster_size >> EXT2_MIN_CLUSTER_LOG_SIZE);
if (fs_param.s_log_cluster_size &&
fs_param.s_log_cluster_size < fs_param.s_log_block_size) {
com_err(program_name, 0, "%s",
@@ -2580,7 +2559,7 @@ profile_error:
"flex_bg size may not be specified"));
exit(1);
}
- fs_param.s_log_groups_per_flex = int_log2(flex_bg_size);
+ fs_param.s_log_groups_per_flex = ext2fs_log2(flex_bg_size);
}
if (inode_size && fs_param.s_rev_level >= EXT2_DYNAMIC_REV) {
diff --git a/misc/mke2fs.h b/misc/mke2fs.h
index ce72cb3f..c718fceb 100644
--- a/misc/mke2fs.h
+++ b/misc/mke2fs.h
@@ -21,7 +21,6 @@ extern char *get_string_from_profile(char **types, const char *opt,
const char *def_val);
extern int get_int_from_profile(char **types, const char *opt, int def_val);
extern int get_bool_from_profile(char **types, const char *opt, int def_val);
-extern int int_log10(unsigned long long arg);
/* mk_hugefiles.c */
extern errcode_t mk_hugefiles(ext2_filsys fs, const char *device_name);
--
2.25.1
Powered by blists - more mailing lists