svn commit: r301548 - head/sys/fs/ext2fs

Pedro F. Giffuni pfg at FreeBSD.org
Tue Jun 7 14:37:45 UTC 2016


Author: pfg
Date: Tue Jun  7 14:37:43 2016
New Revision: 301548
URL: https://svnweb.freebsd.org/changeset/base/301548

Log:
  ext2fs: cleanup generation number management.
  
  Ext2/3/4 manages generation numbers differently than UFS so adopt
  some rules that should work well. When allocating a new inode,
  make sure we generate a "good" random value specifically avoiding
  zero.
  
  Don't interfere with the numbers that are already generated in
  the filesystem: ext2fs doesn't have the backwards compatibility
  issues  where there were no generation numbers.
  
  Reviewed by:	kevlo
  MFC after:	1 week

Modified:
  head/sys/fs/ext2fs/ext2_alloc.c
  head/sys/fs/ext2fs/ext2_vfsops.c

Modified: head/sys/fs/ext2fs/ext2_alloc.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_alloc.c	Tue Jun  7 14:16:10 2016	(r301547)
+++ head/sys/fs/ext2fs/ext2_alloc.c	Tue Jun  7 14:37:43 2016	(r301548)
@@ -407,9 +407,11 @@ ext2_valloc(struct vnode *pvp, int mode,
 
 	/*
 	 * Set up a new generation number for this inode.
+	 * Avoid zero values.
 	 */
-	while (ip->i_gen == 0 || ++ip->i_gen == 0)
+	do {
 		ip->i_gen = arc4random();
+	} while ( ip->i_gen == 0);
 
 	vfs_timestamp(&ts);
 	ip->i_birthtime = ts.tv_sec;

Modified: head/sys/fs/ext2fs/ext2_vfsops.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_vfsops.c	Tue Jun  7 14:16:10 2016	(r301547)
+++ head/sys/fs/ext2fs/ext2_vfsops.c	Tue Jun  7 14:37:43 2016	(r301548)
@@ -993,16 +993,6 @@ ext2_vget(struct mount *mp, ino_t ino, i
 	 * Finish inode initialization.
 	 */
 
-	/*
-	 * Set up a generation number for this inode if it does not
-	 * already have one. This should only happen on old filesystems.
-	 */
-	if (ip->i_gen == 0) {
-		while (ip->i_gen == 0)
-			ip->i_gen = arc4random();
-		if ((vp->v_mount->mnt_flag & MNT_RDONLY) == 0)
-			ip->i_flag |= IN_MODIFIED;
-	}
 	*vpp = vp;
 	return (0);
 }


More information about the svn-src-all mailing list