svn commit: r235918 - head/sys/geom/label
Jung-uk Kim
jkim at FreeBSD.org
Thu May 24 22:17:43 UTC 2012
-----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-----
-------------- next part --------------
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;
}
More information about the svn-src-head
mailing list