[PATCH v2] erofs-utils: add --hardlink-dereference option
Gao Xiang
hsiangkao at linux.alibaba.com
Fri Dec 13 01:00:17 AEDT 2024
On 2024/12/12 21:56, Paul Meyer wrote:
> Add option --hardlink-dereference to dereference hardlinks when
> creating an image. Instead of reusing the inode, hardlinks are added
> as separate inodes. This is useful for reproducible builds, when the
> rootfs is space-optimized using hardlinks on some machines, but not on
> others.
>
The subject and commit message is still unchanged...
> Co-authored-by: Leonard Cohnen <leonard.cohnen at gmail.com>
> Signed-off-by: Paul Meyer <katexochen0 at gmail.com>
> ---
>
> v1: https://lore.kernel.org/all/20241211150734.97830-1-katexochen0@gmail.com/
> change since v1:
> - rename option to --hard-dereference
> - add usage
>
> include/erofs/config.h | 1 +
> lib/inode.c | 2 +-
> mkfs/main.c | 5 +++++
> 3 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/include/erofs/config.h b/include/erofs/config.h
> index cff4cea..bb03e70 100644
> --- a/include/erofs/config.h
> +++ b/include/erofs/config.h
> @@ -58,6 +58,7 @@ struct erofs_configure {
> bool c_extra_ea_name_prefixes;
> bool c_xattr_name_filter;
> bool c_ovlfs_strip;
> + bool c_hard_dereference;
>
> #ifdef HAVE_LIBSELINUX
> struct selabel_handle *sehnd;
> diff --git a/lib/inode.c b/lib/inode.c
> index 7e5c581..0404a8d 100644
> --- a/lib/inode.c
> +++ b/lib/inode.c
> @@ -1141,7 +1141,7 @@ static struct erofs_inode *erofs_iget_from_srcpath(struct erofs_sb_info *sbi,
> * hard-link, just return it. Also don't lookup for directories
> * since hard-link directory isn't allowed.
> */
> - if (!S_ISDIR(st.st_mode)) {
> + if (!S_ISDIR(st.st_mode) && (!cfg.c_hard_dereference)) {
> inode = erofs_iget(st.st_dev, st.st_ino);
> if (inode)
> return inode;
> diff --git a/mkfs/main.c b/mkfs/main.c
> index d422787..7eb86f5 100644
> --- a/mkfs/main.c
> +++ b/mkfs/main.c
> @@ -85,6 +85,7 @@ static struct option long_options[] = {
> {"mkfs-time", no_argument, NULL, 525},
> {"all-time", no_argument, NULL, 526},
> {"sort", required_argument, NULL, 527},
> + {"hard-dereference", no_argument, NULL, 528},
> {0, 0, 0, 0},
> };
>
> @@ -214,6 +215,7 @@ static void usage(int argc, char **argv)
> #ifdef EROFS_MT_ENABLED
> , erofs_get_available_processors() /* --workers= */
> #endif
> + " --hard-dereference dereference hardlinks, add links as separate inodes\n"
Does it compile with EROFS_MT_ENABLED?...
Also `--hard-dereference` should be moved upwards to match
alphabetical order.
Thanks,
Gao Xiang
> );
> }
>
> @@ -846,6 +848,9 @@ static int mkfs_parse_options_cfg(int argc, char *argv[])
> if (!strcmp(optarg, "none"))
> erofstar.try_no_reorder = true;
> break;
> + case 528:
> + cfg.c_hard_dereference = true;
> + break;
> case 'V':
> version();
> exit(0);
More information about the Linux-erofs
mailing list