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