Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Oct 2002 13:41:14 +0930
From:      Greg 'groggy' Lehey <grog@FreeBSD.org>
To:        Robert Watson <rwatson@FreeBSD.ORG>, Ian Dowse <iedowse@maths.tcd.ie>
Cc:        n0go013 <ttz@blahdeblah.demon.co.uk>, current <freebsd-current@FreeBSD.ORG>
Subject:   Re: [ GEOM tests ] disklabel warnings and vinum drives lost
Message-ID:  <20021005041114.GL83766@wantadilla.lemis.com>
In-Reply-To: <200210050408.aa61102@salmon.maths.tcd.ie>
References:  <200210050310.ab54012@salmon.maths.tcd.ie> <200210050408.aa61102@salmon.maths.tcd.ie>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday,  5 October 2002 at  4:08:19 +0100, Ian Dowse wrote:
>
> [CCs trimmed]
>
>> The divide by zero problem seems to be caused by an interaction
>> between two bugs: GEOM refuses to return the sector size because
> ...
>> The next failure I get is:
>>
>>	Can't write config to /dev/da1s1d, error 45 (EOPNOTSUPP)
>
> This turns out to be vinum doing a DIOCWLABEL to make the label
> writable before writing its configuration, but GEOM does not support
> that ioctl I presume. It should be safe to ignore these DIOCWLABEL
> ioctl return values as the actual writing of the vinum data should
> give a suitable error if making the label writable fails and is
> important. The patch below is Robert's patch with all 3 other issues
> fixed, and together, this seems to be enough to make vinum work
> again.

> @@ -678,20 +615,18 @@
>  		if ((drive->state != drive_unallocated)
>  		    && (drive->state != drive_referenced)) { /* and it's a real drive */
>  		    wlabel_on = 1;			    /* enable writing the label */
> -		    error = (*devsw(drive->dev)->d_ioctl) (drive->dev, /* make the label writeable */
> +		    (void) (*devsw(drive->dev)->d_ioctl) (drive->dev, /* make the label writeable */
>  			DIOCWLABEL,
>  			(caddr_t) & wlabel_on,
>  			FWRITE,
>  			curthread);
> -		    if (error == 0)
> -			error = write_drive(drive, (char *) vhdr, VINUMHEADERLEN, VINUM_LABEL_OFFSET);
> +		    error = write_drive(drive, (char *) vhdr, VINUMHEADERLEN, VINUM_LABEL_OFFSET);
>  		    if (error == 0)
>  			error = write_drive(drive, config, MAXCONFIG, VINUM_CONFIG_OFFSET); /* first config copy */
>  		    if (error == 0)
>  			error = write_drive(drive, config, MAXCONFIG, VINUM_CONFIG_OFFSET + MAXCONFIG);	/* second copy */
>  		    wlabel_on = 0;			    /* enable writing the label */
> -		    if (error == 0)
> -			error = (*devsw(drive->dev)->d_ioctl) (drive->dev, /* make the label non-writeable again */
> +		    (void) (*devsw(drive->dev)->d_ioctl) (drive->dev, /* make the label non-writeable again */
>  			    DIOCWLABEL,
>  			    (caddr_t) & wlabel_on,
>  			    FWRITE,


I don't know how GEOM handles disk labels, though we've heard a lot
about changes.  It's possible that this code is now completely
redundant.  It's preparing to write at offset 8 sectors and on from
the beginning of the partition; it would be worth checking what
happens if you just remove the whole disk label writeable stuff.

Greg
--
See complete headers for address and phone numbers

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021005041114.GL83766>