Date: Sun, 07 Apr 2019 10:34:15 -0600 From: Ian Lepore <ian@freebsd.org> To: Jia-Shiun Li <jiashiun@gmail.com> Cc: svn-src-head@freebsd.org Subject: Re: svn commit: r345480 - in head/sys: conf geom geom/label Message-ID: <832a6f77ed5e48687ba2b265c1cbb37f7d624ead.camel@freebsd.org> In-Reply-To: <CAHNYxxNje-M_5tknVM3=4LacQONbz_rMvTHcRDxKdLamw37-Hw@mail.gmail.com> References: <201903241911.x2OJBj6x024102@repo.freebsd.org> <CAHNYxxNje-M_5tknVM3=4LacQONbz_rMvTHcRDxKdLamw37-Hw@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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?832a6f77ed5e48687ba2b265c1cbb37f7d624ead.camel>