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 [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to