-----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"