diff options
author | truckman <truckman@FreeBSD.org> | 2004-10-08 20:44:47 +0000 |
---|---|---|
committer | truckman <truckman@FreeBSD.org> | 2004-10-08 20:44:47 +0000 |
commit | 78abfd32f0f68e14f413541b1f360e4c166045a5 (patch) | |
tree | af6db7840e73d182ffa04c61044510d44fa56004 /sbin/fsck_ffs/dir.c | |
parent | f5ef5456b3860f6305fc2281c6ccdd143a02cf56 (diff) | |
download | FreeBSD-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/dir.c')
-rw-r--r-- | sbin/fsck_ffs/dir.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sbin/fsck_ffs/dir.c b/sbin/fsck_ffs/dir.c index a248c27..da838b0 100644 --- a/sbin/fsck_ffs/dir.c +++ b/sbin/fsck_ffs/dir.c @@ -90,7 +90,7 @@ propagate(void) if (inp->i_parent == 0) continue; if (inoinfo(inp->i_parent)->ino_state == DFOUND && - inoinfo(inp->i_number)->ino_state == DSTATE) { + INO_IS_DUNFOUND(inp->i_number)) { inoinfo(inp->i_number)->ino_state = DFOUND; change++; } @@ -639,8 +639,7 @@ allocdir(ino_t parent, ino_t request, int mode) cacheino(dp, ino); return(ino); } - if (inoinfo(parent)->ino_state != DSTATE && - inoinfo(parent)->ino_state != DFOUND) { + if (!INO_IS_DVALID(parent)) { freeino(ino); return (0); } |