-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2012-05-24 16:59:58 -0400, Jung-uk Kim wrote:
> On 2012-05-24 12:48:33 -0400, Edward Tomasz Napierala wrote:
>> Author: trasz Date: Thu May 24 16:48:33 2012 New Revision: 235918
>>  URL: http://svn.freebsd.org/changeset/base/235918
>> 
>> Log: Make g_label(4) ignore provider size when looking for UFS 
>> labels. Without it, it fails to create labels for filesystems 
>> resized by growfs(8).
>> 
>> PR:          kern/165962 Submitted by:       Olivier Cochard-Labbe <olivier 
>> at
>> cochard dot me>
>> 
>> Modified: head/sys/geom/label/g_label_ufs.c
> 
> This commit broke my fstab based on ufsid.  I have something like
> this in my fstab:
> 
> /dev/ufsid/44b3df81873011b5 /    ufs rw,noatime 1 1 
> /dev/ufsid/463b935456452bbd /tmp ufs rw,noatime 2 2 
> /dev/ufsid/44b3dfc4bfcc4c30 /usr ufs rw,noatime 2 2 
> /dev/ufsid/463b934b955f63ff /var ufs rw,noatime 2 2
> 
> Mounting / as read-only went fine and I had /dev/ada0s1a, 
> /dev/ada0s1d, etc.  Strangely, I also had matching ufsid's under 
> /dev/ufsid, e.g., /dev/ufsid/<some_ufsid>a,
> /dev/ufsid/<some_ufsid>d, etc.  However, once I do 'mount -u -w /',
> everything disappears except for root's ufsid.
> 
> Reverting this commit fixed the problem for me.

The attached patch fixed my problem and kern/165962.

Jung-uk Kim
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk++s4YACgkQmlay1b9qnVO5uACglaXhj9ZXwpUiroMUxqkbHF/v
Qm0An0lHidiRMenHsDLTaiC0Wqz0cYB6
=k1Ff
-----END PGP SIGNATURE-----
Index: sys/geom/label/g_label_ufs.c
===================================================================
--- sys/geom/label/g_label_ufs.c        (revision 235941)
+++ sys/geom/label/g_label_ufs.c        (working copy)
@@ -51,8 +51,9 @@ static void
 g_label_ufs_taste_common(struct g_consumer *cp, char *label, size_t size, int 
what)
 {
        struct g_provider *pp;
+       struct fs *fs;
+       off_t fs_size;
        int sb, superblock;
-       struct fs *fs;
 
        g_topology_assert_not();
        pp = cp->provider;
@@ -82,11 +83,19 @@ g_label_ufs_taste_common(struct g_consumer *cp, ch
                if (fs == NULL)
                        continue;
                /* Check for magic */
-               if (fs->fs_magic == FS_UFS1_MAGIC && fs->fs_fsize > 0) {
-                       /* Valid UFS1. */
-               } else if (fs->fs_magic == FS_UFS2_MAGIC && fs->fs_fsize > 0) {
-                       /* Valid UFS2. */
-               } else {
+               switch (fs->fs_magic) {
+               case FS_UFS1_MAGIC:
+               case FS_UFS2_MAGIC:
+                       if (fs->fs_fsize > 0) {
+                               if (what == G_LABEL_UFS_VOLUME)
+                                       break;
+                               fs_size = (fs->fs_magic == FS_UFS1_MAGIC) ?
+                                   fs->fs_old_size : fs->fs_size;
+                               if (pp->mediasize / fs->fs_fsize == fs_size)
+                                       break;
+                       }
+                       /* FALLTHROUGH */
+               default:
                        g_free(fs);
                        continue;
                }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to