What I've done is add inode-based indexing to the buffer_head
structure, and an i_buffer variable to the inode structure. These allow
me to add various derivative functions (with an i prefix) which use
inode/block addressing rather than device/block addressing.
Right now, the patch works on two different areas : the minix
filesystem, and executable loading/mmaping. The latter is possible
because I've written a ibread_page function, and I've rewritten
mm/filemap.c to use it rather than going through it's own mapping
functions and eventually calling bread_page. This should speed up
repeated executable load times slightly.
A lot of work still has to be done in optimizing the filesystems
to use the new addressing. When this is done, buffer performance should
rise considerable, but the I/O performance will still have some room for
improvment...
Since linux-kernel isin't working too great as is, I'm not going
to post the patch here (it's 7K or so...). It's available at
ftp.best.com:/pub/cpage/buffer_01.gz. I'd like people to run performance
benchmarks on it (using the *minix* filesystem - ext2 hasn't been done
yet, and seems resistant to igetblk. Executable tests should also go
faster now, I hope, so test those too please!)
Enjoy the patches!
- Chad