svn commit: r269852 - in head: sbin/geom/class/part sys/geom/part

Andrey V. Elsukov ae at FreeBSD.org
Tue Aug 12 09:10:14 UTC 2014


Author: ae
Date: Tue Aug 12 09:10:13 2014
New Revision: 269852
URL: http://svnweb.freebsd.org/changeset/base/269852

Log:
  Add sysctl and loader tunable kern.geom.part.mbr.enforce_chs that is set
  by default. It can be used to disable automatic alignment to CHS geometry,
  that GEOM_PART_MBR does.
  
  Reviewed by:	wblock
  MFC after:	1 week

Modified:
  head/sbin/geom/class/part/gpart.8
  head/sys/geom/part/g_part_mbr.c

Modified: head/sbin/geom/class/part/gpart.8
==============================================================================
--- head/sbin/geom/class/part/gpart.8	Tue Aug 12 02:09:00 2014	(r269851)
+++ head/sbin/geom/class/part/gpart.8	Tue Aug 12 09:10:13 2014	(r269852)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd August 3, 2014
+.Dd August 12, 2014
 .Dt GPART 8
 .Os
 .Sh NAME
@@ -1183,6 +1183,12 @@ If this variable set to 1 each component
 present as independent partition.
 .Em NOTE :
 This may break a mirrored volume and lead to data damage.
+.It Va kern.geom.part.mbr.enforce_chs : No 1
+Specify how the Master Boot Record (MBR) module does alignment.
+If this variable is set to a non-zero value, the module will automatically
+recalculate the user-specified offset and size for alignment with the CHS
+geometry.
+Otherwise the values will be left unchanged.
 .El
 .Sh EXIT STATUS
 Exit status is 0 on success, and 1 if the command fails.

Modified: head/sys/geom/part/g_part_mbr.c
==============================================================================
--- head/sys/geom/part/g_part_mbr.c	Tue Aug 12 02:09:00 2014	(r269851)
+++ head/sys/geom/part/g_part_mbr.c	Tue Aug 12 09:10:13 2014	(r269852)
@@ -49,6 +49,14 @@ __FBSDID("$FreeBSD$");
 
 FEATURE(geom_part_mbr, "GEOM partitioning class for MBR support");
 
+SYSCTL_DECL(_kern_geom_part);
+static SYSCTL_NODE(_kern_geom_part, OID_AUTO, mbr, CTLFLAG_RW, 0,
+    "GEOM_PART_MBR Master Boot Record");
+
+static u_int enforce_chs = 1;
+SYSCTL_UINT(_kern_geom_part_mbr, OID_AUTO, enforce_chs,
+    CTLFLAG_RWTUN, &enforce_chs, 1, "Enforce alignment to CHS addressing");
+
 #define	MBRSIZE		512
 
 struct g_part_mbr_table {
@@ -200,6 +208,8 @@ mbr_align(struct g_part_table *basetable
 {
 	uint32_t sectors;
 
+	if (enforce_chs == 0)
+		return (0);
 	sectors = basetable->gpt_sectors;
 	if (*size < sectors)
 		return (EINVAL);


More information about the svn-src-all mailing list