From ac393197666889065ee724a360566fa1ff32b1de Mon Sep 17 00:00:00 2001 From: grog Date: Mon, 2 Dec 2002 23:49:59 +0000 Subject: 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) --- sbin/bsdlabel/bsdlabel.c | 9 ++++++--- sbin/disklabel/disklabel.c | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'sbin') 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)) { -- cgit v1.1