cvs commit: src/sbin/growfs growfs.c
scottl at FreeBSD.org
Fri Oct 8 19:53:48 PDT 2004
scottl 2004-10-09 02:53:47 UTC
FreeBSD src repository
3 important fixes for growfs:
1) ginode() is passed a cylinder group number and inode number. The inode
number is relative to the cg. Use this relative number rather than the
absolute inode number when searching the cg inode bitmap to see if the inode
is allocated. Using the absolute number quickly runs the check off the end
of the array and causes invalid inodes to be referenced.
2) ginode() checks the absolute indoe number to make sure that it is greater
than ROOTINO. However, the caller loops through all of the possible inode
numbers and directly passes in values that are < ROOTINO. Instead of halting
the program with an error, just return NULL.
3) When allocating new cylinder groups, growfs was initializing all of the
inodes in the group regardless of this only being required for UFS1. Not
doing this for UFS2 provides a significant performance increase.
These fixes allow growing a filesystem beyond a trivial amount and have
been tested to grow an 8GB filesystem to 1.9TB. Much more testing would
Obtained from: Sandvine, Inc.
Revision Changes Path
1.23 +42 -22 src/sbin/growfs/growfs.c
More information about the cvs-all