PERFORCE change 168853 for review

Aditya Sarawgi truncs at FreeBSD.org
Thu Sep 24 16:46:18 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=168853

Change 168853 by truncs at aditya on 2009/09/24 16:45:21

	Update the orlov block allocator variables when dealing with directory inodes.

Affected files ...

.. //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_alloc.c#9 edit

Differences ...

==== //depot/projects/soc2009/soc_ext2fs/src/sys/fs/ext2fs/ext2_alloc.c#9 (text+ko) ====

@@ -343,10 +343,15 @@
 	 * else obtain it using ino_to_cg. The preferred inode is always the next
 	 * inode.
 	 */
-	if((mode & IFMT) == IFDIR)
+	if((mode & IFMT) == IFDIR) {
 		cg = ext2_dirpref(pip);
-	else
+		if (fs->e2fs_contigdirs[cg] < 255)
+			fs->e2fs_contigdirs[cg]++;
+	} else {
 		cg = ino_to_cg(fs, pip->i_number);
+		if (fs->e2fs_contigdirs[cg] > 0)
+			fs->e2fs_contigdirs[cg]--;
+	}
 	ipref = cg * fs->e2fs->e2fs_ipg + 1;
         ino = (ino_t)ext2_hashalloc(pip, cg, (long)ipref, mode, ext2_nodealloccg);
 
@@ -418,7 +423,7 @@
 
  	avgifree = fs->e2fs->e2fs_ficount / fs->e2fs_gcount;
 	avgbfree = fs->e2fs->e2fs_fbcount / fs->e2fs_gcount;
-	avgndir  = fs->e2fs_total_dir / e2fs->e2fs_gcount;
+	avgndir  = fs->e2fs_total_dir / fs->e2fs_gcount;
 
 	/*
 	 * Force allocation in another cg if creating a first level dir.
@@ -466,7 +471,7 @@
 		maxcontigdirs = 0;		/* dirsize overflowed */
 	else
 		maxcontigdirs = min((avgbfree * fs->e2fs_bsize) / dirsize, 255);
-		maxcontigdirs = min(maxcontigdirs, fs->fs_ipg / AFPDIR);
+		maxcontigdirs = min(maxcontigdirs, fs->e2fs_ipg / AFPDIR);
 	if (maxcontigdirs == 0)
 		maxcontigdirs = 1;
 
@@ -748,6 +753,7 @@
 	fs->e2fs_fmod = 1;
 	if ((mode & IFMT) == IFDIR) {
 		fs->e2fs_gd[cg].ext2bgd_ndirs++;
+		fs->e2fs_total_dir++;
 	}
 	bdwrite(bp);
 	unlock_super(DEVVP(ip));
@@ -842,6 +848,7 @@
 	fs->e2fs_gd[cg].ext2bgd_nifree++;
 	if ((mode & IFMT) == IFDIR) {
 		fs->e2fs_gd[cg].ext2bgd_ndirs--;
+		fs->e2fs_total_dir--;
 	}
 	fs->e2fs_fmod = 1;
 	bdwrite(bp);


More information about the p4-projects mailing list