On Wed, Apr 23, 2014 at 10:37:55AM +0200, Otto Moerbeek wrote:
> On Tue, Apr 22, 2014 at 09:51:47PM -0500, Shawn K. Quinn wrote:
>
> > Either I'm missing something obvious, or something is amiss in disklabel
> > as of the April 19 snapshot for amd64. I'm thinking it's the latter
> > because, as you can see below, 'disklabel -E' has no issue with what
> > 'disklabel -e' complains about:
> >
> > Script started on Tue Apr 22 21:44:41 2014
> > # disklabel sd0
> > # /dev/rsd0c:
> > type: SCSI
> > disk: SCSI disk
> > label: ST3750528AS
> > duid: e6430fb1fad1094c
> > flags:
> > bytes/sector: 512
> > sectors/track: 63
> > tracks/cylinder: 255
> > sectors/cylinder: 16065
> > cylinders: 91201
> > total sectors: 1953525168
> > boundstart: 64
> > boundend: 1953525168
> > drivedata: 0
> >
> > 16 partitions:
> > # size offset fstype [fsize bsize cpg]
> > a: 2097152 64 4.2BSD 2048 16384 1 # /
> > b: 70243488 2097216 swap # none
> > c: 1953525168 0 unused
> > d: 8911776 72340704 4.2BSD 2048 16384 1
> > e: 8911776 124776832 4.2BSD 2048 16384 1 # /usr
> > f: 171964064 133688608 4.2BSD 2048 16384 1
> > g: 8385920 305652672 4.2BSD 2048 16384 1 #
> > /var/squid
> > h: 20964853 314038592 4.2BSD 2048 16384 1 #
> > /usr/local
> > i: 197091136 335003456 4.2BSD 2048 16384 1 #
> > /media/shawn-backups
> > k: 524291584 532094592 4.2BSD 4096 32768 1 #
> > /media/music
> > l: 120118048 1056386176 4.2BSD 2048 16384 1
> > m: 25181216 1176504224 4.2BSD 2048 16384 1 #
> > /var/www
> > n: 2097152 1201685440 4.2BSD 2048 16384 1
> > o: 83901568 1203782592 4.2BSD 2048 16384 1 # /var
> > p: 665840960 1287684160 4.2BSD 4096 32768 1 # /home
> > # disklabel -E sd0
> > Label editor (enter '?' for help at any prompt)
> > > c
> > partition to change size: [] p
> > Partition p is currently 665840960 sectors in size, and can have a
> > maximum
> > size of 665841008 sectors.
> > size: [665840960]
> > > c
> > partition to change size: [] c
> > Partition must be between 'a' and 'p' (excluding 'c').
> > > q
> > No label changes.
> > # disklabel -e sd0
> > disklabel: partition c: partition extends past end of unit
> > disklabel: partition p: partition extends past end of unit
> > re-edit the label? [y]: n
> > # ^D
> >
> > Script done on Tue Apr 22 21:45:05 2014
> >
> > (The editor session after 'disklabel -e' is simply ':q', so it's getting
> > back the same disklabel that I got to edit with no changes.)
> >
> > --
> > Shawn K. Quinn
> > [email protected]
>
> What is happening:
>
> The code to read back the ascii disklabel (after editing) now ignores
> total sectors (disklabel rev 1.92).
>
> Next, checklabel finds a 0 size and assumes a size of
> sectors/cylinder * cylinders (disklabel.c:1294 in current)
>
> In your case that's 16065*91201 = 1465144065, which is too small.
>
> The diff below seems to correct this.
A slightly different fix has been commited,
-Otto
>
>
> Index: disklabel.c
> ===================================================================
> RCS file: /cvs/src/sbin/disklabel/disklabel.c,v
> retrieving revision 1.193
> diff -u -p -r1.193 disklabel.c
> --- disklabel.c 18 Mar 2014 22:36:30 -0000 1.193
> +++ disklabel.c 23 Apr 2014 08:36:01 -0000
> @@ -839,10 +839,10 @@ edit(struct disklabel *lp, int f)
> starting_sector = DL_GETBSTART(&label);
> total_sectors = DL_GETDSIZE(&label);
> memset(&label, 0, sizeof(label));
> - error = getasciilabel(fp, &label);
> DL_SETBEND(&label, ending_sector);
> DL_SETBSTART(&label, starting_sector);
> DL_SETDSIZE(&label, total_sectors);
> + error = getasciilabel(fp, &label);
>
> if (error == 0) {
> if (cmplabel(lp, &label) == 0) {