[PATCH] erofs-utils: mkfs: Add volume-name setting support

Naoto Yamaguchi wata2ki at gmail.com
Wed Oct 5 08:33:55 AEDT 2022


Hi Gao

Thank you follow up.

Good for this patch.  I agree to this update.

Thanks,
Naoto Yamaguchi.
a member of Automotive Grade Linux Instrument Cluster EG.

2022年10月5日(水) 2:54 Gao Xiang <xiang at kernel.org>:
>
> Hi Naoto,
>
> On Wed, Oct 05, 2022 at 02:04:39AM +0900, Naoto Yamaguchi wrote:
> > Hi Gao
> >
> > Sorry I'm missing subject and commit message.
> > I inclement and fix commit message.
> >
>
> I've fixed some minor stuffs as below, please help check if it looks
> good to you so that I could apply this version then.
>
> Thanks,
> Gao Xiang
>
> > Thanks,
> > Naoto Yamaguchi.
> > a member of Automotive Grade Linux Instrument Cluster EG.
> >
>
> From b1114ba7b3acfc60c9ab5a707f0a5f38eb4ac825 Mon Sep 17 00:00:00 2001
> From: Naoto Yamaguchi <naoto.yamaguchi at aisin.co.jp>
> Date: Wed, 5 Oct 2022 02:01:15 +0900
> Subject: [PATCH] erofs-utils: mkfs: Add volume-label setting support
>
> The on-disk erofs_super_block has the volume_name field.  On the other
> hand, mkfs.erofs doesn't support setting volume label.
>
> This patch adds volume-label setting support to mkfs.erofs.
> Option keyword is similar to mke2fs.
>
> Usage:
>   mkfs.erofs -L volume-label image-fn dir
>
> Signed-off-by: Naoto Yamaguchi <naoto.yamaguchi at aisin.co.jp>
> Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
> ---
>  include/erofs/internal.h |  1 +
>  man/mkfs.erofs.1         |  5 +++++
>  mkfs/main.c              | 15 ++++++++++++++-
>  3 files changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/include/erofs/internal.h b/include/erofs/internal.h
> index db7ac2d..13c691b 100644
> --- a/include/erofs/internal.h
> +++ b/include/erofs/internal.h
> @@ -94,6 +94,7 @@ struct erofs_sb_info {
>         u64 inos;
>
>         u8 uuid[16];
> +       char volume_name[16];
>
>         u16 available_compr_algs;
>         u16 lz4_max_distance;
> diff --git a/man/mkfs.erofs.1 b/man/mkfs.erofs.1
> index 11e8323..b65d01b 100644
> --- a/man/mkfs.erofs.1
> +++ b/man/mkfs.erofs.1
> @@ -66,6 +66,11 @@ Pack the tail part (pcluster) of compressed files into its metadata to save
>  more space and the tail part I/O. (Linux v5.17+)
>  .RE
>  .TP
> +.BI "\-L " volume-label
> +Set the volume label for the filesystem to
> +.IR volume-label .
> +The maximum length of the volume label is 16 bytes.
> +.TP
>  .BI "\-T " #
>  Set all files to the given UNIX timestamp. Reproducible builds requires setting
>  all to a specific one.
> diff --git a/mkfs/main.c b/mkfs/main.c
> index 8b97796..00a2deb 100644
> --- a/mkfs/main.c
> +++ b/mkfs/main.c
> @@ -86,6 +86,7 @@ static void usage(void)
>               " -zX[,Y]               X=compressor (Y=compression level, optional)\n"
>               " -C#                   specify the size of compress physical cluster in bytes\n"
>               " -EX[,...]             X=extended options\n"
> +             " -L volume-label       set the volume label (maximum 16)\n"
>               " -T#                   set a fixed UNIX timestamp # to all files\n"
>  #ifdef HAVE_LIBUUID
>               " -UX                   use a given filesystem UUID\n"
> @@ -237,7 +238,7 @@ static int mkfs_parse_options_cfg(int argc, char *argv[])
>         int opt, i;
>         bool quiet = false;
>
> -       while ((opt = getopt_long(argc, argv, "C:E:T:U:d:x:z:",
> +       while ((opt = getopt_long(argc, argv, "C:E:L:T:U:d:x:z:",
>                                   long_options, NULL)) != -1) {
>                 switch (opt) {
>                 case 'z':
> @@ -280,6 +281,17 @@ static int mkfs_parse_options_cfg(int argc, char *argv[])
>                         if (opt)
>                                 return opt;
>                         break;
> +
> +               case 'L':
> +                       if (optarg == NULL ||
> +                           strlen(optarg) > sizeof(sbi.volume_name)) {
> +                               erofs_err("invalid volume label");
> +                               return -EINVAL;
> +                       }
> +                       strncpy(sbi.volume_name, optarg,
> +                               sizeof(sbi.volume_name));
> +                       break;
> +
>                 case 'T':
>                         cfg.c_unix_timestamp = strtoull(optarg, &endptr, 0);
>                         if (cfg.c_unix_timestamp == -1 || *endptr != '\0') {
> @@ -510,6 +522,7 @@ int erofs_mkfs_update_super_block(struct erofs_buffer_head *bh,
>         sb.root_nid     = cpu_to_le16(root_nid);
>         sb.packed_nid    = cpu_to_le64(packed_nid);
>         memcpy(sb.uuid, sbi.uuid, sizeof(sb.uuid));
> +       memcpy(sb.volume_name, sbi.volume_name, sizeof(sb.volume_name));
>
>         if (erofs_sb_has_compr_cfgs())
>                 sb.u1.available_compr_algs = sbi.available_compr_algs;
> --
> 2.30.2
>


More information about the Linux-erofs mailing list