summaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ffs/pass3.c
diff options
context:
space:
mode:
authortruckman <truckman@FreeBSD.org>2004-10-08 20:44:47 +0000
committertruckman <truckman@FreeBSD.org>2004-10-08 20:44:47 +0000
commit78abfd32f0f68e14f413541b1f360e4c166045a5 (patch)
treeaf6db7840e73d182ffa04c61044510d44fa56004 /sbin/fsck_ffs/pass3.c
parentf5ef5456b3860f6305fc2281c6ccdd143a02cf56 (diff)
downloadFreeBSD-src-78abfd32f0f68e14f413541b1f360e4c166045a5.zip
FreeBSD-src-78abfd32f0f68e14f413541b1f360e4c166045a5.tar.gz
Eliminate linked list used to track inodes with an initial link
count of zero and instead encode this information in the inode state. Pass 4 performed a linear search of this list for each inode in the file system, which performs poorly if the list is long. Reviewed by: sam & keramida (an earlier version of the patch), mckusick MFC after: 1 month
Diffstat (limited to 'sbin/fsck_ffs/pass3.c')
-rw-r--r--sbin/fsck_ffs/pass3.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sbin/fsck_ffs/pass3.c b/sbin/fsck_ffs/pass3.c
index 644fd69..22309cb 100644
--- a/sbin/fsck_ffs/pass3.c
+++ b/sbin/fsck_ffs/pass3.c
@@ -69,7 +69,7 @@ pass3(void)
inp = inpsort[inpindex];
state = inoinfo(inp->i_number)->ino_state;
if (inp->i_number == ROOTINO ||
- (inp->i_parent != 0 && state != DSTATE))
+ (inp->i_parent != 0 && !S_IS_DUNFOUND(state)))
continue;
if (state == DCLEAR)
continue;
@@ -80,7 +80,7 @@ pass3(void)
* in pass 4.
*/
if ((preen || bkgrdflag) &&
- resolved && usedsoftdep && state == DSTATE) {
+ resolved && usedsoftdep && S_IS_DUNFOUND(state)) {
if (inp->i_dotdot >= ROOTINO)
inoinfo(inp->i_dotdot)->ino_linkcnt++;
continue;
@@ -88,7 +88,7 @@ pass3(void)
for (loopcnt = 0; ; loopcnt++) {
orphan = inp->i_number;
if (inp->i_parent == 0 ||
- inoinfo(inp->i_parent)->ino_state != DSTATE ||
+ !INO_IS_DUNFOUND(inp->i_parent) ||
loopcnt > countdirs)
break;
inp = getinoinfo(inp->i_parent);
OpenPOWER on IntegriCloud