svn commit: r345480 - in head/sys: conf geom geom/label

Ian Lepore ian at freebsd.org
Sun Apr 7 16:34:28 UTC 2019


On Sun, 2019-04-07 at 22:53 +0800, Jia-Shiun Li wrote:
> 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.
> 

Oops, sorry abou that, I forgot to add the new source file to the
module makefile.  Should be fixed with r346013.

-- Ian

> On Mon, Mar 25, 2019 at 3:12 AM Ian Lepore <ian at 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 at 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 at 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 at freebsd.org mailing list
> > https://lists.freebsd.org/mailman/listinfo/svn-src-head
> > To unsubscribe, send any mail to "
> > svn-src-head-unsubscribe at freebsd.org"
> > 



More information about the svn-src-head mailing list