From: Gao Xiang via Linux-erofs <linux-erofs@lists.ozlabs.org> To: Li Guifu <bluce.liguifu@huawei.com>, Chao Yu <yuchao0@huawei.com>, linux-erofs@lists.ozlabs.org Cc: Miao Xie <miaoxie@huawei.com> Subject: [PATCH v4] erofs-utils: support 128-bit filesystem UUID Date: Wed, 13 Nov 2019 14:01:41 +0800 Message-ID: <20191113060141.9502-1-hsiangkao@aol.com> (raw) In-Reply-To: <20191113035221.30265-1-hsiangkao@aol.com> Complete filesystem UUID feature on userspace side. Cc: Chao Yu <yuchao0@huawei.com> Cc: Li Guifu <bluce.liguifu@huawei.com> Signed-off-by: Gao Xiang <hsiangkao@aol.com> --- changes since v3: - fix configure.ac script and fully passed travis CI https://travis-ci.org/erofs/erofs-utils-ci/builds/611213382 configure.ac | 41 ++++++++++++++++++++++++++++++++++++++++ include/erofs/internal.h | 1 + mkfs/Makefile.am | 3 ++- mkfs/main.c | 20 ++++++++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index a93767f..c7dbe0e 100644 --- a/configure.ac +++ b/configure.ac @@ -20,6 +20,15 @@ AC_PROG_INSTALL LT_INIT +# Test presence of pkg-config +AC_MSG_CHECKING([pkg-config m4 macros]) +if test m4_ifdef([PKG_CHECK_MODULES], [yes], [no]) = "yes"; then + AC_MSG_RESULT([yes]); +else + AC_MSG_RESULT([no]); + AC_MSG_ERROR([pkg-config is required. See pkg-config.freedesktop.org]) +fi + dnl EROFS_UTILS_PARSE_DIRECTORY dnl Input: $1 = a string to a relative or absolute directory dnl Output: $2 = the variable to set with the absolute directory @@ -54,6 +63,10 @@ AC_ARG_ENABLE(lz4, [AS_HELP_STRING([--disable-lz4], [disable LZ4 compression support @<:@default=enabled@:>@])], [enable_lz4="$enableval"], [enable_lz4="yes"]) +AC_ARG_WITH(uuid, + [AS_HELP_STRING([--without-uuid], + [Ignore presence of libuuid and disable uuid support @<:@default=enabled@:>@])]) + # Checks for libraries. # Use customized LZ4 library path when specified. AC_ARG_WITH(lz4-incdir, @@ -123,6 +136,30 @@ AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1, # Checks for library functions. AC_CHECK_FUNCS([fallocate gettimeofday memset realpath strdup strerror strrchr strtoull]) +# Configure libuuid +AS_IF([test "x$with_uuid" != "xno"], [ + PKG_CHECK_MODULES([libuuid], [uuid]) + # Paranoia: don't trust the result reported by pkgconfig before trying out + saved_LIBS="$LIBS" + saved_CPPFLAGS=${CPPFLAGS} + CPPFLAGS="${libuuid_CFLAGS} ${CPPFLAGS}" + LIBS="${libuuid_LIBS} $LIBS" + AC_MSG_CHECKING([libuuid usability]) + AC_TRY_LINK([ +#include <uuid.h> +], [ +uuid_t tmp; + +uuid_generate(tmp); +return 0; +], [have_uuid="yes" + AC_MSG_RESULT([yes])], [ + have_uuid="no" + AC_MSG_RESULT([no]) + AC_MSG_ERROR([libuuid doesn't work properly])]) + LIBS="${saved_LIBS}" + CPPFLAGS="${saved_CPPFLAGS}"], [have_uuid="no"]) + # Configure lz4 test -z $LZ4_LIBS && LZ4_LIBS='-llz4' @@ -169,6 +206,10 @@ if test "x$enable_lz4" = "xyes"; then CFLAGS=${saved_CPPFLAGS} fi +if test "x$have_uuid" = "xyes"; then + AC_DEFINE([HAVE_LIBUUID], 1, [Define to 1 if libuuid is found]) +fi + AM_CONDITIONAL([ENABLE_LZ4], [test "x${have_lz4}" = "xyes"]) AM_CONDITIONAL([ENABLE_LZ4HC], [test "x${have_lz4hc}" = "xyes"]) diff --git a/include/erofs/internal.h b/include/erofs/internal.h index 9e2bb9c..e13adda 100644 --- a/include/erofs/internal.h +++ b/include/erofs/internal.h @@ -56,6 +56,7 @@ struct erofs_sb_info { u32 feature_incompat; u64 build_time; u32 build_time_nsec; + u8 uuid[16]; }; /* global sbi */ diff --git a/mkfs/Makefile.am b/mkfs/Makefile.am index 257f864..9ce06d6 100644 --- a/mkfs/Makefile.am +++ b/mkfs/Makefile.am @@ -3,7 +3,8 @@ AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = mkfs.erofs +AM_CPPFLAGS = ${libuuid_CFLAGS} mkfs_erofs_SOURCES = main.c mkfs_erofs_CFLAGS = -Wall -Werror -I$(top_srcdir)/include -mkfs_erofs_LDADD = $(top_builddir)/lib/liberofs.la +mkfs_erofs_LDADD = $(top_builddir)/lib/liberofs.la ${libuuid_LIBS} diff --git a/mkfs/main.c b/mkfs/main.c index 9187c43..7493a48 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -22,6 +22,10 @@ #include "erofs/compress.h" #include "erofs/xattr.h" +#ifdef HAVE_LIBUUID +#include <uuid/uuid.h> +#endif + #define EROFS_SUPER_END (EROFS_SUPER_OFFSET + sizeof(struct erofs_super_block)) static struct option long_options[] = { @@ -234,6 +238,7 @@ int erofs_mkfs_update_super_block(struct erofs_buffer_head *bh, *blocks = erofs_mapbh(NULL, true); sb.blocks = cpu_to_le32(*blocks); sb.root_nid = cpu_to_le16(root_nid); + memcpy(sb.uuid, sbi.uuid, sizeof(sb.uuid)); buf = calloc(sb_blksize, 1); if (!buf) { @@ -305,6 +310,20 @@ static int erofs_mkfs_superblock_csum_set(void) return 0; } +static void erofs_mkfs_generate_uuid(void) +{ + char uuid_str[37] = "not available"; + +#ifdef HAVE_LIBUUID + do { + uuid_generate(sbi.uuid); + } while (uuid_is_null(sbi.uuid)); + + uuid_unparse_lower(sbi.uuid, uuid_str); +#endif + erofs_info("filesystem UUID: %s", uuid_str); +} + int main(int argc, char **argv) { int err = 0; @@ -376,6 +395,7 @@ int main(int argc, char **argv) goto exit; } + erofs_mkfs_generate_uuid(); erofs_inode_manager_init(); err = erofs_build_shared_xattrs_from_path(cfg.c_src_path); -- 2.17.1
next prev parent reply index Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-07 4:03 [PATCH v10 1/2] erofs-utils: support calculating checksum of superblock Gao Xiang 2019-11-07 4:03 ` [PATCH 2/2] erofs-utils: support 128-bit filesystem UUID Gao Xiang 2019-11-08 8:01 ` [PATCH v2] " Gao Xiang 2019-11-13 3:52 ` [PATCH v3] " Gao Xiang via Linux-erofs 2019-11-13 6:01 ` Gao Xiang via Linux-erofs [this message] 2019-11-13 16:36 ` [PATCH v4] " Li Guifu
Reply instructions: You may reply publically to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191113060141.9502-1-hsiangkao@aol.com \ --to=linux-erofs@lists.ozlabs.org \ --cc=bluce.liguifu@huawei.com \ --cc=hsiangkao@aol.com \ --cc=miaoxie@huawei.com \ --cc=yuchao0@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-EROFS Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-erofs/0 linux-erofs/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-erofs linux-erofs/ https://lore.kernel.org/linux-erofs \ linux-erofs@lists.ozlabs.org linux-erofs@ozlabs.org public-inbox-index linux-erofs Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.ozlabs.lists.linux-erofs AGPL code for this site: git clone https://public-inbox.org/public-inbox.git