[PATCH v2] erofs-utils: add --hardlink-dereference option
Paul Meyer
katexochen0 at gmail.com
Fri Dec 13 00:56:03 AEDT 2024
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.
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"
);
}
@@ -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);
--
2.47.0
More information about the Linux-erofs
mailing list