Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157144427
D21350.id61624.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D21350.id61624.diff
View Options
Index: head/lib/geom/part/gpart.8
===================================================================
--- head/lib/geom/part/gpart.8
+++ head/lib/geom/part/gpart.8
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd June 17, 2018
+.Dd September 3, 2019
.Dt GPART 8
.Os
.Sh NAME
@@ -1207,7 +1207,13 @@
GEOM class.
The default value is shown next to each variable.
.Bl -tag -width indent
-.It Va kern.geom.part.auto_resize: No 1
+.It Va kern.geom.part.allow_nesting : No 0
+By default, some schemes (currently BSD, BSD64 and VTOC8) do not permit
+further nested partitioning.
+This variable overrides this restriction and allows arbitrary nesting (except
+within partitions created at offset 0).
+Some schemes have their own separate checks, for which see below.
+.It Va kern.geom.part.auto_resize : No 1
This variable controls automatic resize behavior of
.Nm
GEOM class.
@@ -1228,6 +1234,9 @@
If some inconsistency is detected, the partition table will be
rejected with a diagnostic message:
.Sy "GEOM_PART: Integrity check failed (provider, scheme)" .
+.It Va kern.geom.part.gpt.allow_nesting : No 0
+By default the GPT scheme is allowed only at the outermost nesting level.
+This variable allows this restriction to be removed.
.It Va kern.geom.part.ldm.debug : No 0
Debug level of the Logical Disk Manager (LDM) module.
This can be set to a number between 0 and 2 inclusive.
Index: head/sys/geom/part/g_part.c
===================================================================
--- head/sys/geom/part/g_part.c
+++ head/sys/geom/part/g_part.c
@@ -143,6 +143,10 @@
SYSCTL_UINT(_kern_geom_part, OID_AUTO, auto_resize,
CTLFLAG_RWTUN, &auto_resize, 1,
"Enable auto resize");
+static u_int allow_nesting = 0;
+SYSCTL_UINT(_kern_geom_part, OID_AUTO, allow_nesting,
+ CTLFLAG_RWTUN, &allow_nesting, 0,
+ "Allow additional levels of nesting");
/*
* The GEOM partitioning class.
@@ -2271,7 +2275,13 @@
return;
if (g_handleattr_int(bp, "GEOM::fwsectors", table->gpt_sectors))
return;
- if (g_handleattr_int(bp, "PART::isleaf", table->gpt_isleaf))
+ /*
+ * allow_nesting overrides "isleaf" to false _unless_ the
+ * provider offset is zero, since otherwise we would recurse.
+ */
+ if (g_handleattr_int(bp, "PART::isleaf",
+ table->gpt_isleaf &&
+ (allow_nesting == 0 || entry->gpe_offset == 0)))
return;
if (g_handleattr_int(bp, "PART::depth", table->gpt_depth))
return;
Index: head/sys/geom/part/g_part_gpt.c
===================================================================
--- head/sys/geom/part/g_part_gpt.c
+++ head/sys/geom/part/g_part_gpt.c
@@ -54,6 +54,14 @@
FEATURE(geom_part_gpt, "GEOM partitioning class for GPT partitions support");
+SYSCTL_DECL(_kern_geom_part);
+static SYSCTL_NODE(_kern_geom_part, OID_AUTO, gpt, CTLFLAG_RW, 0,
+ "GEOM_PART_GPT GUID Partition Table");
+
+static u_int allow_nesting = 0;
+SYSCTL_UINT(_kern_geom_part_gpt, OID_AUTO, allow_nesting,
+ CTLFLAG_RWTUN, &allow_nesting, 0, "Allow GPT to be nested inside other schemes");
+
CTASSERT(offsetof(struct gpt_hdr, padding) == 92);
CTASSERT(sizeof(struct gpt_ent) == 128);
@@ -652,8 +660,8 @@
struct g_part_gpt_table *table;
size_t tblsz;
- /* We don't nest, which means that our depth should be 0. */
- if (basetable->gpt_depth != 0)
+ /* Our depth should be 0 unless nesting was explicitly enabled. */
+ if (!allow_nesting && basetable->gpt_depth != 0)
return (ENXIO);
table = (struct g_part_gpt_table *)basetable;
@@ -815,8 +823,8 @@
u_char *buf;
int error, index, pri, res;
- /* We don't nest, which means that our depth should be 0. */
- if (table->gpt_depth != 0)
+ /* Our depth should be 0 unless nesting was explicitly enabled. */
+ if (!allow_nesting && table->gpt_depth != 0)
return (ENXIO);
pp = cp->provider;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, May 19, 6:08 PM (12 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33324125
Default Alt Text
D21350.id61624.diff (3 KB)
Attached To
Mode
D21350: Allow more nesting of GEOM partitioning schemes
Attached
Detach File
Event Timeline
Log In to Comment