On Thu, Feb 21, 2019 at 11:49:51AM +0200, Artturi Alm wrote:

> Hi,
> 
> using R to resize auto allocated partition truncates fsize and bsize
> to 0 of the last partition, like shown below with arm64 snapshot.
> this may be just visual, i haven't tried proceeding w/o resizing the
> last partition to gain those back.
> 
> -Artturi
> 
> 
> Available disks are: sd0.
> Which disk is the root disk? ('?' for details) [sd0] 
> MBR has invalid signature; not showing it.
> Use (W)hole disk or (E)dit the MBR? [whole] 
> Creating a msdos partition and an OpenBSD partition for rest of sd0...done.
> /dev/rsd0i: 32668 sectors in 8167 FAT16 clusters (2048 bytes/cluster)
> bps=512 spc=4 res=1 nft=2 rde=512 sec=32768 mid=0xf8 spf=32 spt=63 hds=255 
> hid=8192
> The auto-allocated layout for sd0 is:
> #                size           offset  fstype [fsize bsize   cpg]
>   a:          1024.0M            40960  4.2BSD   2048 16384     1 # /
>   b:          1170.0M          2138112    swap                    
>   c:         60240.0M                0  unused                    
>   d:          4096.0M          4534304  4.2BSD   2048 16384     1 # /tmp
>   e:          5924.0M         12922880  4.2BSD   2048 16384     1 # /var
>   f:          2048.0M         25055264  4.2BSD   2048 16384     1 # /usr
>   g:          1024.0M         29249568  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:          8529.7M         31346720  4.2BSD   2048 16384     1 # /usr/local
>   i:            16.0M             8192   MSDOS                    
>   j:          2048.0M         48815520  4.2BSD   2048 16384     1 # /usr/src
>   k:          6144.0M         53009824  4.2BSD   2048 16384     1 # /usr/obj
>   l:         28212.3M         65592736  4.2BSD   2048 16384     1 # /home
> Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] e
> Label editor (enter '?' for help at any prompt)
> > p g
> OpenBSD area: 40960-123371520; size: 58.8G; free: 0.0G
> #                size           offset  fstype [fsize bsize   cpg]
>   a:             1.0G            40960  4.2BSD   2048 16384     1 # /
>   b:             1.1G          2138112    swap                    
>   c:            58.8G                0  unused                    
>   d:             4.0G          4534304  4.2BSD   2048 16384     1 # /tmp
>   e:             5.8G         12922880  4.2BSD   2048 16384     1 # /var
>   f:             2.0G         25055264  4.2BSD   2048 16384     1 # /usr
>   g:             1.0G         29249568  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:             8.3G         31346720  4.2BSD   2048 16384     1 # /usr/local
>   i:             0.0G             8192   MSDOS                    
>   j:             2.0G         48815520  4.2BSD   2048 16384     1 # /usr/src
>   k:             6.0G         53009824  4.2BSD   2048 16384     1 # /usr/obj
>   l:            27.6G         65592736  4.2BSD   2048 16384     1 # /home
> > R b
> [+|-]new size (with unit): [2396176] 4g
> Partition l shrunk to 51786368 sectors to make room
> > p g
> OpenBSD area: 40960-123371520; size: 58.8G; free: 0.0G
> #                size           offset  fstype [fsize bsize   cpg]
>   a:             1.0G            40960  4.2BSD   2048 16384     1 # /
>   b:             4.0G          2138112    swap                    
>   c:            58.8G                0  unused                    
>   d:             4.0G         10526720  4.2BSD   2048 16384     1 # /tmp
>   e:             5.8G         18915296  4.2BSD   2048 16384     1 # /var
>   f:             2.0G         31047680  4.2BSD   2048 16384     1 # /usr
>   g:             1.0G         35241984  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:             8.3G         37339136  4.2BSD   2048 16384     1 # /usr/local
>   i:             0.0G             8192   MSDOS                    
>   j:             2.0G         54807936  4.2BSD   2048 16384     1 # /usr/src
>   k:             6.0G         59002240  4.2BSD   2048 16384     1 # /usr/obj
>   l:            24.7G         71585152  4.2BSD      0     0     1 # /home
> > R l
> [+|-]new size (with unit): [51786368] 
> > p g
> OpenBSD area: 40960-123371520; size: 58.8G; free: 0.0G
> #                size           offset  fstype [fsize bsize   cpg]
>   a:             1.0G            40960  4.2BSD   2048 16384     1 # /
>   b:             4.0G          2138112    swap                    
>   c:            58.8G                0  unused                    
>   d:             4.0G         10526720  4.2BSD   2048 16384     1 # /tmp
>   e:             5.8G         18915296  4.2BSD   2048 16384     1 # /var
>   f:             2.0G         31047680  4.2BSD   2048 16384     1 # /usr
>   g:             1.0G         35241984  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:             8.3G         37339136  4.2BSD   2048 16384     1 # /usr/local
>   i:             0.0G             8192   MSDOS                    
>   j:             2.0G         54807936  4.2BSD   2048 16384     1 # /usr/src
>   k:             6.0G         59002240  4.2BSD   2048 16384     1 # /usr/obj
>   l:            24.7G         71585152  4.2BSD   2048 16384     1 # /home
> > R j
> [+|-]new size (with unit): [4194304] 3g
> Partition l shrunk to 49689216 sectors to make room
> > p g
> OpenBSD area: 40960-123371520; size: 58.8G; free: 0.0G
> #                size           offset  fstype [fsize bsize   cpg]
>   a:             1.0G            40960  4.2BSD   2048 16384     1 # /
>   b:             4.0G          2138112    swap                    
>   c:            58.8G                0  unused                    
>   d:             4.0G         10526720  4.2BSD   2048 16384     1 # /tmp
>   e:             5.8G         18915296  4.2BSD   2048 16384     1 # /var
>   f:             2.0G         31047680  4.2BSD   2048 16384     1 # /usr
>   g:             1.0G         35241984  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:             8.3G         37339136  4.2BSD   2048 16384     1 # /usr/local
>   i:             0.0G             8192   MSDOS                    
>   j:             3.0G         54807936  4.2BSD   2048 16384     1 # /usr/src
>   k:             6.0G         61099392  4.2BSD   2048 16384     1 # /usr/obj
>   l:            23.7G         73682304  4.2BSD      0     0     1 # /home
> > w
> > p g
> OpenBSD area: 40960-123371520; size: 58.8G; free: 0.0G
> #                size           offset  fstype [fsize bsize   cpg]
>   a:             1.0G            40960  4.2BSD   2048 16384     1 # /
>   b:             4.0G          2138112    swap                    
>   c:            58.8G                0  unused                    
>   d:             4.0G         10526720  4.2BSD   2048 16384     1 # /tmp
>   e:             5.8G         18915296  4.2BSD   2048 16384     1 # /var
>   f:             2.0G         31047680  4.2BSD   2048 16384     1 # /usr
>   g:             1.0G         35241984  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:             8.3G         37339136  4.2BSD   2048 16384     1 # /usr/local
>   i:             0.0G             8192   MSDOS                    
>   j:             3.0G         54807936  4.2BSD   2048 16384     1 # /usr/src
>   k:             6.0G         61099392  4.2BSD   2048 16384     1 # /usr/obj
>   l:            23.7G         73682304  4.2BSD      0     0     1 # /home
> > R l
> Resize only implemented for auto allocated labels
> > ?
> Available commands:
>  ? | h    - show help                 n [part] - set mount point
>  A        - auto partition all space  p [unit] - print partitions
>  a [part] - add partition             q        - quit & save changes
>  b        - set OpenBSD boundaries    R [part] - resize auto allocated 
> partition
>  c [part] - change partition size     r        - display free space
>  D        - reset label to default    s [path] - save label to file
>  d [part] - delete partition          U        - undo all changes
>  e        - edit drive parameters     u        - undo last change
>  g [d|u]  - [d]isk or [u]ser geometry w        - write label to disk
>  i        - modify disklabel UID      X        - toggle expert mode
>  l [unit] - print disk label header   x        - exit & lose changes
>  M        - disklabel(8) man page     z        - delete all partitions
>  m [part] - modify partition
> 
> Suffixes can be used to indicate units other than sectors:
>  'b' (bytes), 'k' (kilobytes), 'm' (megabytes), 'g' (gigabytes) 't' 
> (terabytes)
>  'c' (cylinders), '%' (% of total disk), '&' (% of free space).
> Values in non-sector units are truncated to the nearest cylinder boundary.
> > m l
> offset: [73682304] 
> size: [49689216] 
> FS type: [4.2BSD] 
> mount point: [/home] 
> > p g
> OpenBSD area: 40960-123371520; size: 58.8G; free: 0.0G
> #                size           offset  fstype [fsize bsize   cpg]
>   a:             1.0G            40960  4.2BSD   2048 16384     1 # /
>   b:             4.0G          2138112    swap                    
>   c:            58.8G                0  unused                    
>   d:             4.0G         10526720  4.2BSD   2048 16384     1 # /tmp
>   e:             5.8G         18915296  4.2BSD   2048 16384     1 # /var
>   f:             2.0G         31047680  4.2BSD   2048 16384     1 # /usr
>   g:             1.0G         35241984  4.2BSD   2048 16384     1 # /usr/X11R6
>   h:             8.3G         37339136  4.2BSD   2048 16384     1 # /usr/local
>   i:             0.0G             8192   MSDOS                    
>   j:             3.0G         54807936  4.2BSD   2048 16384     1 # /usr/src
>   k:             6.0G         61099392  4.2BSD   2048 16384     1 # /usr/obj
>   l:            23.7G         73682304  4.2BSD   2048 16384     1 # /home
> > w
> > q
> No label changes.
> 

Thanks for the report. This should fix it,

        -Otto

Index: editor.c
===================================================================
RCS file: /cvs/src/sbin/disklabel/editor.c,v
retrieving revision 1.353
diff -u -p -r1.353 editor.c
--- editor.c    25 Jan 2019 00:19:26 -0000      1.353
+++ editor.c    21 Feb 2019 11:35:07 -0000
@@ -795,10 +795,10 @@ editor_resize(struct disklabel *lp, char
                        DL_SETPOFFSET(pp, off);
                        if (off + DL_GETPSIZE(pp) > ending_sector) {
                                DL_SETPSIZE(pp, ending_sector - off);
-                               pp->p_fragblock = 0;
-                               if (get_fsize(&label, partno) == 1 ||
-                                   get_bsize(&label, partno) == 1 ||
-                                   get_cpg(&label, partno) == 1)
+                               pp->p_fragblock = DISKLABELV1_FFS_FRAGBLOCK(0, 
0);
+                               if (get_fsize(&label, i) == 1 ||
+                                   get_bsize(&label, i) == 1 ||
+                                   get_cpg(&label, i) == 1)
                                        return;
                                shrunk = i;
                        }

Reply via email to