>Number:         150858
>Category:       kern
>Synopsis:       GEOM_LABEL is not compatible with newfs -r flag
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Sep 22 12:00:12 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Konstantin Kukushkin
>Release:        8.1-STABLE
>Organization:
Rambler
>Environment:
FreeBSD dash.local 8.1-STABLE FreeBSD 8.1-STABLE #0: Wed Sep 22 13:18:16 MSD 
2010     r...@dash.local:/var/tmp/obj/usr/src/sys/EEE8  i386
>Description:
For any provider, GEOM_LABEL strictly checks that ufs occupied all its
space. But filesystem can be smaller, in case if newfs(8) was run with
-r flag. So, GEOM_LABEL is not compatible with newfs -r flag.

When check is more permissive (as in attached patch) all work OK:
[pts/0] r...@dash:/usr/home/dark# uname -rp
8.1-STABLE i386
[pts/0] r...@dash:/usr/home/dark# ll /dev/ufsid/
total 0
crw-r-----  1 root  operator    0,  93 22 ÓÅÎ 17:24 4992d90831a79611
[pts/0] r...@dash:/usr/home/dark# mdconfig -s 32m
md0
[pts/0] r...@dash:/usr/home/dark# newfs -r 4 -U /dev/md0
/dev/md0: 32.0MB (65532 sectors) block size 16384, fragment size 2048
        using 4 cylinder groups of 8.00MB, 512 blks, 1024 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 160, 16544, 32928, 49312
[pts/0] r...@dash:/usr/home/dark# ll /dev/ufsid/
total 0
crw-r-----  1 root  operator    0,  93 22 ÓÅÎ 17:24 4992d90831a79611
crw-r-----  1 root  operator    0, 118 22 ÓÅÎ 13:38 4c99ce860db39b88
[pts/0] r...@dash:/usr/home/dark# glabel status
                  Name  Status  Components
              ntfs/sys     N/A  ada0s1
           msdosfs/SYS     N/A  ada0s2
          msdosfs/BIOS     N/A  ada0s3
              ntfs/BIG     N/A  ada1s2
ufsid/4992d90831a79611     N/A  ada1s1a
ufsid/4c99ce860db39b88     N/A  md0 
>How-To-Repeat:
radius# uname -rp
8.1-20100726-SNAP i386
radius# ll /dev/ufsid/
total 0
crw-r-----  1 root  operator    0,  98 21 ÓÅÎ 22:01 4c98f1c148b0469b
crw-r-----  1 root  operator    0,  99 21 ÓÅÎ 22:01 4c98f1c978a6bb52
radius# mdconfig -s 32m
md0
radius# newfs -r 4 -U /dev/md0
/dev/md0: 32.0MB (65532 sectors) block size 16384, fragment size 2048
        using 4 cylinder groups of 8.00MB, 512 blks, 1024 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 160, 16544, 32928, 49312
radius# ll /dev/ufsid/
total 0
crw-r-----  1 root  operator    0,  98 21 ÓÅÎ 22:01 4c98f1c148b0469b
crw-r-----  1 root  operator    0,  99 21 ÓÅÎ 22:01 4c98f1c978a6bb52
radius# glabel status
                  Name  Status  Components
ufsid/4c98f1c148b0469b     N/A  ada2d
ufsid/4c98f1c978a6bb52     N/A  ada3d
>Fix:
Use attached patch.

Patch attached with submission follows:

--- /sys/geom/label/g_label_ufs.c.orig  2010-07-11 23:06:52.000000000 +0400
+++ /sys/geom/label/g_label_ufs.c       2010-09-22 12:21:23.000000000 +0400
@@ -83,10 +83,10 @@
                        continue;
                /* Check for magic and make sure things are the right size */
                if (fs->fs_magic == FS_UFS1_MAGIC && fs->fs_fsize > 0 &&
-                   pp->mediasize / fs->fs_fsize == fs->fs_old_size) {
+                   pp->mediasize / fs->fs_fsize >= fs->fs_old_size) {
                        /* Valid UFS1. */
                } else if (fs->fs_magic == FS_UFS2_MAGIC && fs->fs_fsize > 0 &&
-                   pp->mediasize / fs->fs_fsize == fs->fs_size) {
+                   pp->mediasize / fs->fs_fsize >= fs->fs_size) {
                        /* Valid UFS2. */
                } else {
                        g_free(fs);


>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to