Date: Sat, 11 Jul 2009 22:15:19 +0400 From: Eygene Ryabinkin <rea-fbsd@codelabs.ru> To: Marcel Moolenaar <xcllnt@mac.com>, freebsd-current@freebsd.org Cc: John Marshall <john.marshall@riverwillow.com.au> Subject: Re: 8.0-BETA1 bsdlabel broken? Message-ID: <TiR5kGIN59NiPk3Q5HjMiImYooQ@MbxgtlHN37ICHkxRO9kSrKasfoA> In-Reply-To: <267A655F-13A6-4D79-A933-3A78854AC5FD@mac.com> References: <v/OAX36A7OnJtyaNY4uYnXPs%2BOI@CWODRlDR5RMqbkBfR0/UzHcfNhE> <EC5F9AF8-2C2D-45DF-A1A2-8481EC73E426@mac.com> <20090710042106.GC31950@rwpc12.mby.riverwillow.net.au> <fX%2BVI6m2svXk4wDqOGQ3HIesgO8@jmKTY7juey8QgiyMw1P6k9Lb4sg> <20090710071023.GB32316@rwpc12.mby.riverwillow.net.au> <20090710112631.GE32316@rwpc12.mby.riverwillow.net.au> <3a142e750907100433y307f9b2bya1dc54953bdf5de2@mail.gmail.com> <0B1F6799-2FAC-4C01-A978-42E247979CAB@mac.com> <1z5niluEh3OBPNSdMbOMyoEwzX4@CWODRlDR5RMqbkBfR0/UzHcfNhE> <267A655F-13A6-4D79-A933-3A78854AC5FD@mac.com>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --]
G'day.
Fri, Jul 10, 2009 at 10:15:27AM -0700, Marcel Moolenaar wrote:
> There is no need for the verb. bsdlabel should use the same
> logic the kernel is using: if the C partition has a non-zero
> offset, then the label is absolute and you can subtract that
> offset from all partitions to make the label relative.
OK, the attached patch should solve the issue in the bsdlabel:
it really uses the offset of the 'c' partition to make offsets
to be relative.
Sat, Jul 11, 2009 at 06:24:14PM +1000, John Marshall wrote:
> > Can you send me the output of "gpart show da0" and "gpart show da0s1".
> > Could you also send me (or make available for download) a binary dump
> > of sectors 0 (the MBR), 63 and 64 (the disklabel in slice 1).
>
> I have backed out the inclusion of GEOM_BSD in the kernel and no longer
> have the WARNING messages appearing in dmesg.
Yes, sorry -- it was my fault to advise to include it.
Please, try the attached patch -- it should heal bsdlabel and it will
show/use the proper offsets everywhere. Works fine for me -- offsets
for 7.x and 8.x are the same.
Fri, Jul 10, 2009 at 09:33:10AM -0700, Marcel Moolenaar wrote:
> Please don't use GEOM_BSD. It's obsolete. I haven't removed
> the code out of conservatism, but consider it dead and gone.
>
> As a special warning: you should not have both GEOM_PART_BSD
> and GEOM_BSD. My gut feeling tells me that you have both and
> that's why you have the mess you're having.
Then I would add a bit stronger warning about the GEOM_BSD into
/usr/src/UPDATING -- the current one (from 20090320) is rather mild in
respect of the obsoletenness of GEOM_BSD. And since GEOM_PART_* seem to
be included by-default, it will produce the mess I had seen when
GEOM_BSD is included too. It will be good to embed the checks for
incompatible options into config(8). I'll draft the needed patches
for config(8).
--
Eygene
_ ___ _.--. #
\`.|\..----...-'` `-._.-'_.-'` # Remember that it is hard
/ ' ` , __.--' # to read the on-line manual
)/' _/ \ `-_, / # while single-stepping the kernel.
`-'" `"\_ ,_.-;_.-\_ ', fsc/as #
_.-'_./ {_.' ; / # -- FreeBSD Developers handbook
{_.-``-' {_/ #
[-- Attachment #2 --]
From fb4d6d8676700caf861d164003339fb1609e05db Mon Sep 17 00:00:00 2001
From: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
Date: Sat, 11 Jul 2009 14:53:11 +0400
Subject: [PATCH] bsdlabel: obtain slice offset from the disklabel itself
Don't use offset from MBR that is obtained by the geom(4): not any
system has MBR and so on ;)) Partition 'c' holds offset, so it is
used -- this corresponds to the current kernel behaviour.
Signed-off-by: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
---
sbin/bsdlabel/bsdlabel.c | 28 ++++++++--------------------
1 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/sbin/bsdlabel/bsdlabel.c b/sbin/bsdlabel/bsdlabel.c
index 1cb9995..5aa97df 100644
--- a/sbin/bsdlabel/bsdlabel.c
+++ b/sbin/bsdlabel/bsdlabel.c
@@ -118,7 +118,6 @@ static int installboot; /* non-zero if we should install a boot program */
static int allfields; /* present all fields in edit */
static char const *xxboot; /* primary boot */
-static off_t mbroffset;
#ifndef LABELSECTOR
#define LABELSECTOR -1
#endif
@@ -388,6 +387,7 @@ writelabel(void)
struct gctl_req *grq;
char const *errstr;
struct disklabel *lp = &lab;
+ off_t sliceoffset;
if (disable_write) {
warnx("write to disk label supressed - label was as follows:");
@@ -401,9 +401,10 @@ writelabel(void)
lp->d_checksum = dkcksum(lp);
if (installboot)
readboot();
+ sliceoffset = lab.d_partitions[RAW_PART].p_offset;
for (i = 0; i < lab.d_npartitions; i++)
if (lab.d_partitions[i].p_size)
- lab.d_partitions[i].p_offset += mbroffset;
+ lab.d_partitions[i].p_offset += sliceoffset;
bsd_disklabel_le_enc(bootarea + labeloffset + labelsoffset * secsize,
lp);
if (alphacksum) {
@@ -481,8 +482,7 @@ readlabel(int flag)
{
int f, i;
int error;
- struct gctl_req *grq;
- char const *errstr;
+ off_t sliceoffset;
f = open(specname, O_RDONLY);
if (f < 0)
@@ -510,22 +510,10 @@ readlabel(int flag)
if (is_file)
return(0);
- grq = gctl_get_handle();
- gctl_ro_param(grq, "verb", -1, "read mbroffset");
- gctl_ro_param(grq, "class", -1, "BSD");
- gctl_ro_param(grq, "geom", -1, pname);
- gctl_rw_param(grq, "mbroffset", sizeof(mbroffset), &mbroffset);
- errstr = gctl_issue(grq);
- if (errstr != NULL) {
- mbroffset = 0;
- gctl_free(grq);
- return (error);
- }
- mbroffset /= lab.d_secsize;
- if (lab.d_partitions[RAW_PART].p_offset == mbroffset)
- for (i = 0; i < lab.d_npartitions; i++)
- if (lab.d_partitions[i].p_size)
- lab.d_partitions[i].p_offset -= mbroffset;
+ sliceoffset = lab.d_partitions[RAW_PART].p_offset;
+ for (i = 0; i < lab.d_npartitions; i++)
+ if (lab.d_partitions[i].p_size)
+ lab.d_partitions[i].p_offset -= sliceoffset;
return (error);
}
--
1.6.3.1
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?TiR5kGIN59NiPk3Q5HjMiImYooQ>
