summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>2002-12-02 23:49:59 +0000
committergrog <grog@FreeBSD.org>2002-12-02 23:49:59 +0000
commitac393197666889065ee724a360566fa1ff32b1de (patch)
tree9844ff776781c03f5736fcbbf4b5ab9906fe8886 /sbin
parentcfb76a599318018df7d879ef19e4b9e5872adb08 (diff)
downloadFreeBSD-src-ac393197666889065ee724a360566fa1ff32b1de.zip
FreeBSD-src-ac393197666889065ee724a360566fa1ff32b1de.tar.gz
Relax partition overlap check to allow Vinum partitions to overlap
other partitiosns. This is necessary when migrating conventional partitions to Vinum and was broken by recent more stringent overlap checks. This is arguably the wrong way to do it. A better method would be to have the loader understand a subset of Vinum partitioning and allow an install directly to Vinum, but until then, this is the best we have. Reviewed by: jhb Approved by: re (rwatson)
Diffstat (limited to 'sbin')
-rw-r--r--sbin/bsdlabel/bsdlabel.c9
-rw-r--r--sbin/disklabel/disklabel.c9
2 files changed, 12 insertions, 6 deletions
diff --git a/sbin/bsdlabel/bsdlabel.c b/sbin/bsdlabel/bsdlabel.c
index 6c16a47..3d3139f 100644
--- a/sbin/bsdlabel/bsdlabel.c
+++ b/sbin/bsdlabel/bsdlabel.c
@@ -1462,7 +1462,8 @@ checklabel(struct disklabel *lp)
} else {
/* allow them to be out of order for old-style tables */
if (pp->p_offset < current_offset &&
- seen_default_offset && i != RAW_PART) {
+ seen_default_offset && i != RAW_PART &&
+ pp->p_fstype != FS_VINUM) {
fprintf(stderr,
"Offset %ld for partition %c overlaps previous partition which ends at %lu\n",
(long)pp->p_offset,i+'a',current_offset);
@@ -1537,9 +1538,11 @@ checklabel(struct disklabel *lp)
/* check for overlaps */
/* this will check for all possible overlaps once and only once */
for (j = 0; j < i; j++) {
- if (j != RAW_PART && i != RAW_PART &&
+ pp2 = &lp->d_partitions[j];
+ if (j != RAW_PART && i != RAW_PART &&
+ pp->p_fstype != FS_VINUM &&
+ pp2->p_fstype != FS_VINUM &&
part_set[i] && part_set[j]) {
- pp2 = &lp->d_partitions[j];
if (pp2->p_offset < pp->p_offset + pp->p_size &&
(pp2->p_offset + pp2->p_size > pp->p_offset ||
pp2->p_offset >= pp->p_offset)) {
diff --git a/sbin/disklabel/disklabel.c b/sbin/disklabel/disklabel.c
index 6c16a47..3d3139f 100644
--- a/sbin/disklabel/disklabel.c
+++ b/sbin/disklabel/disklabel.c
@@ -1462,7 +1462,8 @@ checklabel(struct disklabel *lp)
} else {
/* allow them to be out of order for old-style tables */
if (pp->p_offset < current_offset &&
- seen_default_offset && i != RAW_PART) {
+ seen_default_offset && i != RAW_PART &&
+ pp->p_fstype != FS_VINUM) {
fprintf(stderr,
"Offset %ld for partition %c overlaps previous partition which ends at %lu\n",
(long)pp->p_offset,i+'a',current_offset);
@@ -1537,9 +1538,11 @@ checklabel(struct disklabel *lp)
/* check for overlaps */
/* this will check for all possible overlaps once and only once */
for (j = 0; j < i; j++) {
- if (j != RAW_PART && i != RAW_PART &&
+ pp2 = &lp->d_partitions[j];
+ if (j != RAW_PART && i != RAW_PART &&
+ pp->p_fstype != FS_VINUM &&
+ pp2->p_fstype != FS_VINUM &&
part_set[i] && part_set[j]) {
- pp2 = &lp->d_partitions[j];
if (pp2->p_offset < pp->p_offset + pp->p_size &&
(pp2->p_offset + pp2->p_size > pp->p_offset ||
pp2->p_offset >= pp->p_offset)) {
OpenPOWER on IntegriCloud