Nice catch!  I think you should report this to phk@ or ru@ who have been
the most active in the fdisk area :-)

- Giorgos


On 2005-07-28 16:40, dpk <[EMAIL PROTECTED]> wrote:
>
> I've remounted the disk readonly, and was still seeing the same errors.
> I've looked at the fdisk source and compared it to the truss output.
>
> ... /* rwmode is O_RDWR due to -u */
>         fd = open(disk, rwmode);
> ... /* errno is EPERM here, from truss */
>         if (fd == -1 && errno == ENXIO)
>                 return -2;
>         if (fd == -1 && errno == EPERM && rwmode == O_RDWR) {
> ... /* this is successful: */
>                 fd = open(disk, O_RDONLY);
> ... /* the following opens get device not configured, or no such file or
> directory under normal operation, from truss */
>                 for (p = 1; p < 5; p++) {
>                         asprintf(&s, "%ss%d", disk, p);
>                         fdw = open(s, O_RDONLY);
>                         free(s);
>                         if (fdw == -1)
>                                 continue;
>                         break;
>                 }
> ... /* ah ha! open_disk is returning -4 because the last slice had some
> error */
>                 if (fdw == -1)
>                         return -4;
>
> This change was introduced with version 1.67 of the fdisk.c file.
>
> Commenting out if (fdw == -1) return -4; allows fdisk -u to function. Here
> are the results, not changing anything:
>
> # ./fdisk -u
> ******* Working on device /dev/da0 *******
> parameters extracted from in-core disklabel are:
> cylinders=534921 heads=255 sectors/track=63 (16065 blks/cyl)
>
> Figures below won't work with BIOS for partitions not in cyl 1
> parameters to be used for BIOS calculations are:
> cylinders=534921 heads=255 sectors/track=63 (16065 blks/cyl)
>
> Do you want to change our idea of what BIOS thinks ? [n]
> Media sector size is 512
> Warning: BIOS sector numbering starts with sector 1
> Information from DOS bootblock is:
> The data for partition 1 is:
> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
>     start 63, size 75489372 (36860 Meg), flag 80 (active)
>         beg: cyl 0/ head 1/ sector 1;
>         end: cyl 1023/ head 254/ sector 63
> Do you want to change it? [n]
> The data for partition 2 is:
> <UNUSED>
> Do you want to change it? [n]
> The data for partition 3 is:
> <UNUSED>
> Do you want to change it? [n]
> The data for partition 4 is:
> <UNUSED>
> Do you want to change it? [n]
> Partition 1 is marked active
> Do you want to change the active partition? [n]
>
> Here are the results of ./fdisk -u when trying to add the second
> partition:
>
> # ./fdisk -u
> ******* Working on device /dev/da0 *******
> parameters extracted from in-core disklabel are:
> cylinders=534921 heads=255 sectors/track=63 (16065 blks/cyl)
>
> Figures below won't work with BIOS for partitions not in cyl 1
> parameters to be used for BIOS calculations are:
> cylinders=534921 heads=255 sectors/track=63 (16065 blks/cyl)
>
> Do you want to change our idea of what BIOS thinks ? [n] n
> Media sector size is 512
> Warning: BIOS sector numbering starts with sector 1
> Information from DOS bootblock is:
> The data for partition 1 is:
> sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
>     start 63, size 75489372 (36860 Meg), flag 80 (active)
>         beg: cyl 0/ head 1/ sector 1;
>         end: cyl 1023/ head 254/ sector 63
> Do you want to change it? [n] n
> The data for partition 2 is:
> <UNUSED>
> Do you want to change it? [n] y
> Supply a decimal value for "sysid (165=FreeBSD)" [0] 165
> Supply a decimal value for "start" [0]
> Supply a decimal value for "size" [0]
> fdisk: ERROR: size of partition is zero
> fdisk: ERROR: failed to adjust; setting sysid to 0
> Explicitly specify beg/end address ? [n] y
> Supply a decimal value for "beginning cylinder" [0] 1024
> Supply a decimal value for "beginning head" [0]
> Supply a decimal value for "beginning sector" [0]
> Supply a decimal value for "ending cylinder" [0] 534921
> Supply a decimal value for "ending head" [0] 254
> Supply a decimal value for "ending sector" [0] 63
> sysid 0 (0000),(unused)
>     start 0, size 0 (0 Meg), flag 0
>         beg: cyl 0/ head 0/ sector 0;
>         end: cyl 393/ head 254/ sector 63
>
> Writing it fails, but I didn't really expect it to succeed with the above
> values. There's some overflowing going on.
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to