From owner-svn-src-head@freebsd.org Fri May 29 19:44:19 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id AEF522F0113; Fri, 29 May 2020 19:44:19 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49YZl745H9z4JnB; Fri, 29 May 2020 19:44:19 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 879E01D00A; Fri, 29 May 2020 19:44:19 +0000 (UTC) (envelope-from cem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 04TJiJWw010456; Fri, 29 May 2020 19:44:19 GMT (envelope-from cem@FreeBSD.org) Received: (from cem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 04TJiJ22010454; Fri, 29 May 2020 19:44:19 GMT (envelope-from cem@FreeBSD.org) Message-Id: <202005291944.04TJiJ22010454@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: cem set sender to cem@FreeBSD.org using -f From: Conrad Meyer Date: Fri, 29 May 2020 19:44:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r361635 - head/sys/geom/part X-SVN-Group: head X-SVN-Commit-Author: cem X-SVN-Commit-Paths: head/sys/geom/part X-SVN-Commit-Revision: 361635 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 May 2020 19:44:19 -0000 Author: cem Date: Fri May 29 19:44:18 2020 New Revision: 361635 URL: https://svnweb.freebsd.org/changeset/base/361635 Log: geom_part: Dispatch to partitions to create providers and aliases This allows partitions to create additional aliases of their own. The default method implementations preserve the existing behavior. No functional change. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D24938 Modified: head/sys/geom/part/g_part.c head/sys/geom/part/g_part_if.m Modified: head/sys/geom/part/g_part.c ============================================================================== --- head/sys/geom/part/g_part.c Fri May 29 19:29:10 2020 (r361634) +++ head/sys/geom/part/g_part.c Fri May 29 19:44:18 2020 (r361635) @@ -469,7 +469,6 @@ g_part_new_provider(struct g_geom *gp, struct g_part_t { struct g_consumer *cp; struct g_provider *pp; - struct sbuf *sb; struct g_geom_alias *gap; off_t offset; @@ -481,11 +480,7 @@ g_part_new_provider(struct g_geom *gp, struct g_part_t entry->gpe_offset = offset; if (entry->gpe_pp == NULL) { - sb = sbuf_new_auto(); - G_PART_FULLNAME(table, entry, sb, gp->name); - sbuf_finish(sb); - entry->gpe_pp = g_new_providerf(gp, "%s", sbuf_data(sb)); - sbuf_delete(sb); + entry->gpe_pp = G_PART_NEW_PROVIDER(table, gp, entry, gp->name); /* * If our parent provider had any aliases, then copy them to our * provider so when geom DEV tastes things later, they will be @@ -493,13 +488,8 @@ g_part_new_provider(struct g_geom *gp, struct g_part_t * place of the geom's name we use to create the provider. The * kobj interface that generates names makes this awkward. */ - LIST_FOREACH(gap, &pp->aliases, ga_next) { - sb = sbuf_new_auto(); - G_PART_FULLNAME(table, entry, sb, gap->ga_alias); - sbuf_finish(sb); - g_provider_add_alias(entry->gpe_pp, "%s", sbuf_data(sb)); - sbuf_delete(sb); - } + LIST_FOREACH(gap, &pp->aliases, ga_next) + G_PART_ADD_ALIAS(table, entry->gpe_pp, entry, gap->ga_alias); entry->gpe_pp->flags |= G_PF_DIRECT_SEND | G_PF_DIRECT_RECEIVE; entry->gpe_pp->private = entry; /* Close the circle. */ } Modified: head/sys/geom/part/g_part_if.m ============================================================================== --- head/sys/geom/part/g_part_if.m Fri May 29 19:29:10 2020 (r361634) +++ head/sys/geom/part/g_part_if.m Fri May 29 19:44:18 2020 (r361635) @@ -52,6 +52,34 @@ CODE { G_PART_NAME(table, entry, buf, sizeof(buf))); } + static struct g_provider * + default_new_provider(struct g_part_table *table, struct g_geom *gp, + struct g_part_entry *entry, const char *pfx) + { + struct g_provider *ret; + struct sbuf *sb; + + sb = sbuf_new_auto(); + G_PART_FULLNAME(table, entry, sb, pfx); + sbuf_finish(sb); + ret = g_new_providerf(gp, "%s", sbuf_data(sb)); + sbuf_delete(sb); + return (ret); + } + + static void + default_add_alias(struct g_part_table *table, struct g_provider *pp, + struct g_part_entry *entry, const char *pfx) + { + struct sbuf *sb; + + sb = sbuf_new_auto(); + G_PART_FULLNAME(table, entry, sb, pfx); + sbuf_finish(sb); + g_provider_add_alias(pp, "%s", sbuf_data(sb)); + sbuf_delete(sb); + } + static int default_precheck(struct g_part_table *t __unused, enum g_part_ctl r __unused, struct g_part_parms *p __unused) @@ -88,6 +116,15 @@ METHOD int add { struct g_part_parms *gpp; }; +# add_alias() - Create aliases for the partition's provider with the given +# alias prefixes. +METHOD void add_alias { + struct g_part_table *table; + struct g_provider *pp; + struct g_part_entry *entry; + const char *pfx; +} DEFAULT default_add_alias; + # bootcode() - scheme specific processing for the bootcode verb. METHOD int bootcode { struct g_part_table *table; @@ -144,6 +181,14 @@ METHOD int modify { struct g_part_entry *entry; struct g_part_parms *gpp; }; + +# new_provider() - Create the partition's provider(s). +METHOD struct g_provider * new_provider { + struct g_part_table *table; + struct g_geom *gp; + struct g_part_entry *entry; + const char *pfx; +} DEFAULT default_new_provider; # resize() - scheme specific processing for the resize verb. METHOD int resize {