[PATCH v6 06/11] erofs-utils: lib: add erofs_rebuild_get_dentry() helper
Gao Xiang
hsiangkao at linux.alibaba.com
Thu Sep 7 20:02:21 AEST 2023
On 2023/9/5 18:02, Jingbo Xu wrote:
> Rename tarerofs_get_dentry() to erofs_rebuild_get_dentry().
>
> Also make `whout` and 'opq' parameter optional when `aufs` is false.
>
> Signed-off-by: Jingbo Xu <jefflexu at linux.alibaba.com>
> ---
> include/erofs/rebuild.h | 19 +++++++
> lib/Makefile.am | 3 +-
> lib/rebuild.c | 117 ++++++++++++++++++++++++++++++++++++++++
> lib/tar.c | 109 ++-----------------------------------
> 4 files changed, 141 insertions(+), 107 deletions(-)
> create mode 100644 include/erofs/rebuild.h
> create mode 100644 lib/rebuild.c
>
> diff --git a/include/erofs/rebuild.h b/include/erofs/rebuild.h
> new file mode 100644
> index 0000000..92873c9
> --- /dev/null
> +++ b/include/erofs/rebuild.h
> @@ -0,0 +1,19 @@
> +/* SPDX-License-Identifier: GPL-2.0+ OR Apache-2.0 */
> +#ifndef __EROFS_REBUILD_H
> +#define __EROFS_REBUILD_H
> +
> +#ifdef __cplusplus
> +extern "C"
> +{
> +#endif
> +
> +#include "internal.h"
> +
> +struct erofs_dentry *erofs_rebuild_get_dentry(struct erofs_inode *pwd,
> + char *path, bool aufs, bool *whout, bool *opq);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif
> diff --git a/lib/Makefile.am b/lib/Makefile.am
> index 3e09516..8a45bd6 100644
> --- a/lib/Makefile.am
> +++ b/lib/Makefile.am
> @@ -25,6 +25,7 @@ noinst_HEADERS = $(top_srcdir)/include/erofs_fs.h \
> $(top_srcdir)/include/erofs/compress_hints.h \
> $(top_srcdir)/include/erofs/fragments.h \
> $(top_srcdir)/include/erofs/xxhash.h \
> + $(top_srcdir)/include/erofs/rebuild.h \
> $(top_srcdir)/lib/liberofs_private.h
>
> noinst_HEADERS += compressor.h
> @@ -32,7 +33,7 @@ liberofs_la_SOURCES = config.c io.c cache.c super.c inode.c xattr.c exclude.c \
> namei.c data.c compress.c compressor.c zmap.c decompress.c \
> compress_hints.c hashmap.c sha256.c blobchunk.c dir.c \
> fragments.c rb_tree.c dedupe.c uuid_unparse.c uuid.c tar.c \
> - block_list.c xxhash.c
> + block_list.c xxhash.c rebuild.c
>
> liberofs_la_CFLAGS = -Wall ${libuuid_CFLAGS} -I$(top_srcdir)/include
> if ENABLE_LZ4
> diff --git a/lib/rebuild.c b/lib/rebuild.c
> new file mode 100644
> index 0000000..7aaa071
> --- /dev/null
> +++ b/lib/rebuild.c
> @@ -0,0 +1,117 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR Apache-2.0
> +#define _GNU_SOURCE
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include "erofs/print.h"
> +#include "erofs/inode.h"
> +#include "erofs/rebuild.h"
> +#include "erofs/internal.h"
> +
> +#ifdef HAVE_LINUX_AUFS_TYPE_H
> +#include <linux/aufs_type.h>
> +#else
> +#define AUFS_WH_PFX ".wh."
> +#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq"
> +#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME
> +#endif
> +
> +static struct erofs_dentry *erofs_rebuild_mkdir(struct erofs_inode *dir,
> + const char *s)
> +{
> + struct erofs_inode *inode;
> + struct erofs_dentry *d;
> +
> + inode = erofs_new_inode();
> + if (IS_ERR(inode))
> + return ERR_CAST(inode);
> +
> + inode->i_mode = S_IFDIR | 0755;
> + inode->i_parent = dir;
> + inode->i_uid = getuid();
> + inode->i_gid = getgid();
> + inode->i_mtime = inode->sbi->build_time;
> + inode->i_mtime_nsec = inode->sbi->build_time_nsec;
> + erofs_init_empty_dir(inode);
> +
> + d = erofs_d_alloc(dir, s);
> + if (!IS_ERR(d)) {
> + d->type = EROFS_FT_DIR;
> + d->inode = inode;
> + }
> + return d;
> +}
> +
> +struct erofs_dentry *erofs_rebuild_get_dentry(struct erofs_inode *pwd,
> + char *path, bool aufs, bool *whout, bool *opq)
> +{
> + struct erofs_dentry *d = NULL;
> + unsigned int len = strlen(path);
> + char *s = path;
> +
> + if (aufs) {
> + *whout = false;
> + *opq = false;
> + }
I'd suggest adding a boolean dumb instead here, otherwise
it looks good to me.
Thanks,
Gao Xiang
More information about the Linux-erofs
mailing list