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>