svn commit: r345480 - in head/sys: conf geom geom/label
Jia-Shiun Li
jiashiun at gmail.com
Sun Apr 7 14:54:04 UTC 2019
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 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