HAMMER VFS - Implement inode number matching against the directory hash
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 21 Jun 2009 02:29:57 +0000 (19:29 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 21 Jun 2009 02:29:57 +0000 (19:29 -0700)
commit5a64efa13fd54a45eec98cf4f8a8ee56842bf811
treeac54d5fc820fe709e8be2bdb88269fd8bbb7f862
parent0e9fad5e47425d0753278b41e5169f5b8c50799d
HAMMER VFS - Implement inode number matching against the directory hash

Change hammer_create_inode() and hammer_alloc_objid() to take the upper
10 bits of the filename hash and attempt to use them as the lower 10 bits
of the inode number.

hammer_alloc_objid() now utilizes a small two-level 1024-bit bitmap to
assign the low 10 bits of the inode number, on a per-directory basis.
If a collision occurs a nearby value is used instead.

The idea is for inode numbers to have approximately the same linearity
as the directory read scan order, so programs such as cpio, tar, cpdup,
find, and ls which do recursive scans of the directory tree get much
better locality of reference for stat() and other related system calls.

Based-on: Numerous discussions with people, esp corecode.
sys/vfs/hammer/hammer.h
sys/vfs/hammer/hammer_inode.c
sys/vfs/hammer/hammer_transaction.c
sys/vfs/hammer/hammer_vnops.c