Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 7 Apr 2019 22:53:35 +0800
From:      Jia-Shiun Li <jiashiun@gmail.com>
To:        Ian Lepore <ian@freebsd.org>
Cc:        svn-src-head@freebsd.org
Subject:   Re: svn commit: r345480 - in head/sys: conf geom geom/label
Message-ID:  <CAHNYxxNje-M_5tknVM3=4LacQONbz_rMvTHcRDxKdLamw37-Hw@mail.gmail.com>
In-Reply-To: <201903241911.x2OJBj6x024102@repo.freebsd.org>
References:  <201903241911.x2OJBj6x024102@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi Ian,

after this commit it is not possible to load geom_label as module.
Loading geom_flashmap does not help.

# uname -a
FreeBSD 4cbsd 13.0-CURRENT FreeBSD 13.0-CURRENT r345759 MINIMAL-NODEBUG
amd64
# kldload /boot/MINIMAL-NODEBUG/geom_label.ko
kldload: an error occurred while loading module
/boot/MINIMAL-NODEBUG/geom_label.ko. Please check dmesg(8) for more details.
# dmesg | tail -2
link_elf_obj: symbol g_label_flashmap undefined
linker_load_file: /boot/MINIMAL-NODEBUG/geom_label.ko - unsupported file
type
#

I used ufsid label to locate root fs, and have to fall back to partition
name for now.

/boot/loader.conf:
#vfs.root.mountfrom="ufs:/dev/ufsid/54a0236e063b0242"
vfs.root.mountfrom="ufs:/dev/ada0s4a"


- Jia-Shiun.

On Mon, Mar 25, 2019 at 3:12 AM Ian Lepore <ian@freebsd.org> wrote:

> Author: ian
> Date: Sun Mar 24 19:11:45 2019
> New Revision: 345480
> URL: https://svnweb.freebsd.org/changeset/base/345480
>
> Log:
>   Support device-independent labels for geom_flashmap slices.
>
>   While geom_flashmap has always supported label names for its slices, it
> does
>   so by appending "s.labelname" to the provider device name, meaning you
> still
>   have to know the name and unit of the hardware device to use the labels.
>
>   These changes add support for device-independent geom_flashmap labels,
> using
>   the standard geom_label infrastructure. geom_flashmap now creates a softc
>   struct attached to its geom, and as it creates slices it stores the label
>   into an array in the softc. The new geom_label_flashmap uses those labels
>   when tasting a geom_flashmap provider.
>
>   Differential Revision:        https://reviews.freebsd.org/D19535
>
> Added:
>   head/sys/geom/geom_flashmap.h   (contents, props changed)
>   head/sys/geom/label/g_label_flashmap.c   (contents, props changed)
> Modified:
>   head/sys/conf/files
>   head/sys/geom/geom_flashmap.c
>   head/sys/geom/label/g_label.c
>   head/sys/geom/label/g_label.h
>
> Modified: head/sys/conf/files
>
> ==============================================================================
> --- head/sys/conf/files Sun Mar 24 19:09:50 2019        (r345479)
> +++ head/sys/conf/files Sun Mar 24 19:11:45 2019        (r345480)
> @@ -3628,6 +3628,7 @@ geom/journal/g_journal.c  optional geom_journal
>  geom/journal/g_journal_ufs.c   optional geom_journal
>  geom/label/g_label.c           optional geom_label | geom_label_gpt
>  geom/label/g_label_ext2fs.c    optional geom_label
> +geom/label/g_label_flashmap.c  optional geom_label
>  geom/label/g_label_iso9660.c   optional geom_label
>  geom/label/g_label_msdosfs.c   optional geom_label
>  geom/label/g_label_ntfs.c      optional geom_label
>
> Modified: head/sys/geom/geom_flashmap.c
>
> ==============================================================================
> --- head/sys/geom/geom_flashmap.c       Sun Mar 24 19:09:50 2019
> (r345479)
> +++ head/sys/geom/geom_flashmap.c       Sun Mar 24 19:11:45 2019
> (r345480)
> @@ -39,13 +39,12 @@ __FBSDID("$FreeBSD$");
>  #include <sys/slicer.h>
>
>  #include <geom/geom.h>
> -#include <geom/geom_slice.h>
>  #include <geom/geom_disk.h>
> +#include <geom/geom_flashmap.h>
> +#include <geom/geom_slice.h>
>
>  #include <dev/nand/nand_dev.h>
>
> -#define        FLASHMAP_CLASS_NAME "Flashmap"
> -
>  struct g_flashmap_slice {
>         off_t           sl_start;
>         off_t           sl_end;
> @@ -71,8 +70,8 @@ static g_taste_t g_flashmap_taste;
>
>  static int g_flashmap_load(device_t dev, struct g_provider *pp,
>      flash_slicer_t slicer, struct g_flashmap_head *head);
> -static int g_flashmap_modify(struct g_geom *gp, const char *devname,
> -    int secsize, struct g_flashmap_head *slices);
> +static int g_flashmap_modify(struct g_flashmap *gfp, struct g_geom *gp,
> +    const char *devname, int secsize, struct g_flashmap_head *slices);
>  static void g_flashmap_print(struct g_flashmap_slice *slice);
>
>  MALLOC_DECLARE(M_FLASHMAP);
> @@ -88,8 +87,8 @@ g_flashmap_print(struct g_flashmap_slice *slice)
>  }
>
>  static int
> -g_flashmap_modify(struct g_geom *gp, const char *devname, int secsize,
> -    struct g_flashmap_head *slices)
> +g_flashmap_modify(struct g_flashmap *gfp, struct g_geom *gp,
> +    const char *devname, int secsize, struct g_flashmap_head *slices)
>  {
>         struct g_flashmap_slice *slice;
>         int i, error;
> @@ -114,6 +113,8 @@ g_flashmap_modify(struct g_geom *gp, const char *devna
>
>         i = 0;
>         STAILQ_FOREACH(slice, slices, sl_link) {
> +               free(__DECONST(void *, gfp->labels[i]), M_FLASHMAP);
> +               gfp->labels[i] = strdup(slice->sl_name, M_FLASHMAP);
>                 error = g_slice_config(gp, i++, G_SLICE_CONFIG_SET,
>                     slice->sl_start,
>                     slice->sl_end - slice->sl_start + 1,
> @@ -153,6 +154,7 @@ g_flashmap_taste(struct g_class *mp, struct g_provider
>         struct g_consumer *cp;
>         struct g_flashmap_head head;
>         struct g_flashmap_slice *slice, *slice_temp;
> +       struct g_flashmap *gfp;
>         flash_slicer_t slicer;
>         device_t dev;
>         int i, size;
> @@ -164,7 +166,8 @@ g_flashmap_taste(struct g_class *mp, struct g_provider
>             strcmp(pp->geom->class->name, G_DISK_CLASS_NAME) != 0)
>                 return (NULL);
>
> -       gp = g_slice_new(mp, FLASH_SLICES_MAX_NUM, pp, &cp, NULL, 0, NULL);
> +       gp = g_slice_new(mp, FLASH_SLICES_MAX_NUM, pp, &cp, (void**)&gfp,
> +           sizeof(struct g_flashmap), NULL);
>         if (gp == NULL)
>                 return (NULL);
>
> @@ -186,7 +189,7 @@ g_flashmap_taste(struct g_class *mp, struct g_provider
>                 if (g_flashmap_load(dev, pp, slicer, &head) == 0)
>                         break;
>
> -               g_flashmap_modify(gp, cp->provider->name,
> +               g_flashmap_modify(gfp, gp, cp->provider->name,
>                     cp->provider->sectorsize, &head);
>         } while (0);
>
>
> Added: head/sys/geom/geom_flashmap.h
>
> ==============================================================================
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ head/sys/geom/geom_flashmap.h       Sun Mar 24 19:11:45 2019
> (r345480)
> @@ -0,0 +1,39 @@
> +/*-
> + * SPDX-License-Identifier: BSD-2-Clause
> + *
> + * Copyright (c) 2019 Ian Lepore <ian@FreeBSD.org>
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * $FreeBSD$
> + */
> +
> +#ifndef _GEOM_GEOM_FLASHMAP_H_
> +
> +#define        FLASHMAP_CLASS_NAME "Flashmap"
> +
> +struct g_flashmap {
> +       const char *labels[FLASH_SLICES_MAX_NUM];
> +};
> +
> +#endif
> +
>
> Modified: head/sys/geom/label/g_label.c
>
> ==============================================================================
> --- head/sys/geom/label/g_label.c       Sun Mar 24 19:09:50 2019
> (r345479)
> +++ head/sys/geom/label/g_label.c       Sun Mar 24 19:11:45 2019
> (r345480)
> @@ -95,6 +95,7 @@ const struct g_label_desc *g_labels[] = {
>         &g_label_reiserfs,
>         &g_label_ntfs,
>         &g_label_disk_ident,
> +       &g_label_flashmap,
>  #endif
>         NULL
>  };
>
> Modified: head/sys/geom/label/g_label.h
>
> ==============================================================================
> --- head/sys/geom/label/g_label.h       Sun Mar 24 19:09:50 2019
> (r345479)
> +++ head/sys/geom/label/g_label.h       Sun Mar 24 19:11:45 2019
> (r345480)
> @@ -88,6 +88,7 @@ extern struct g_label_desc g_label_ntfs;
>  extern struct g_label_desc g_label_gpt;
>  extern struct g_label_desc g_label_gpt_uuid;
>  extern struct g_label_desc g_label_disk_ident;
> +extern struct g_label_desc g_label_flashmap;
>
>  extern void g_label_rtrim(char *label, size_t size);
>  #endif /* _KERNEL */
>
> Added: head/sys/geom/label/g_label_flashmap.c
>
> ==============================================================================
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ head/sys/geom/label/g_label_flashmap.c      Sun Mar 24 19:11:45 2019
>       (r345480)
> @@ -0,0 +1,77 @@
> +/*-
> + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
> + *
> + * Copyright (c) 2019 Ian Lepore <ian@FreeBSD.org>
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#include <sys/cdefs.h>
> +__FBSDID("$FreeBSD$");
> +
> +#include <sys/param.h>
> +#include <sys/systm.h>
> +#include <sys/kernel.h>
> +#include <sys/malloc.h>
> +#include <sys/slicer.h>
> +
> +#include <geom/geom.h>
> +#include <geom/geom_flashmap.h>
> +#include <geom/geom_slice.h>
> +#include <geom/label/g_label.h>
> +
> +#define        G_LABEL_FLASHMAP_SLICE_DIR      "flash"
> +
> +static void
> +g_label_flashmap_taste(struct g_consumer *cp, char *label, size_t size)
> +{
> +       struct g_flashmap *gfp;
> +       struct g_slicer *gsp;
> +       struct g_provider *pp;
> +
> +       g_topology_assert_not();
> +
> +       pp = cp->provider;
> +       label[0] = '\0';
> +
> +       /* We taste only partitions handled by flashmap */
> +       if (strncmp(pp->geom->class->name, FLASHMAP_CLASS_NAME,
> +           sizeof(FLASHMAP_CLASS_NAME)) != 0)
> +               return;
> +
> +       gsp = (struct g_slicer *)pp->geom->softc;
> +       gfp = (struct g_flashmap *)gsp->softc;
> +
> +       /* If it's handled by flashmap it should have a label, but be
> safe. */
> +       if (gfp->labels[pp->index] == NULL)
> +               return;
> +
> +       strlcpy(label, gfp->labels[pp->index], size);
> +}
> +
> +struct g_label_desc g_label_flashmap = {
> +       .ld_taste = g_label_flashmap_taste,
> +       .ld_dir = G_LABEL_FLASHMAP_SLICE_DIR,
> +       .ld_enabled = 1
> +};
> +
> +G_LABEL_INIT(flashmap, g_label_flashmap, "Create device nodes for
> Flashmap labels");
> _______________________________________________
> svn-src-head@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAHNYxxNje-M_5tknVM3=4LacQONbz_rMvTHcRDxKdLamw37-Hw>