Been sitting on this for about a month, time to check it in.
The original architecture, implemented by someone who will remain
nameless, for the cache lookup has bugged me from day one. Two
levels of lookup were involved, one of which was not really needed,
the top one was just an encapsulation to avoid putting an extra
field into an inode. The real problem was that it should not have
been an inode in the first place, all we needed from the inode
was an address space. This replaces the magic metadata inode with
a special structure which xfs passes around where it used to pass
around that inode and removes the need for a lookup to map from the
inode to the pagebuf cache. No significant speedup, but should shrink
the kernel a bit, reduce cpu usage a bit, and reduce contention
on some locks.
Date: Thu May 10 07:44:32 PDT 2001
Workarea: jen.americas.sgi.com:/src/lord/xfs-linux.2.4
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.x-xfs
Modid: 2.4.x-xfs:slinx:94513a
linux/fs/xfs/xfsidbg.c - 1.161
- Change xbuf idbg function to deal with change in target structure
linux/fs/xfs/xfs_buf.h - 1.73
- Change more macros to call pagebuf directly rather than a wrapper
function.
linux/fs/xfs/xfs_vfsops.c - 1.316
- Change names of functions used to release caches during failed mount.
linux/fs/xfs/xfs_mount.c - 1.255
- change names of functions used to release caches at end of unmount.
linux/fs/xfs/linux/xfs_lrw.c - 1.96
- remove some wrapper functions which were basically one liners, call
the
pagebuf functions directly instead. Also deal with the change to the
target object for metadata no longer being an inode. Use new
pagebuf_lookup
function.
linux/fs/xfs/linux/xfs_super.h - 1.9
- change the prototypes for metadata cache creation functions.
linux/fs/xfs/linux/xfs_super.c - 1.121
- change the structures we create to hold the metadata cache.
linux/include/linux/page_buf.h - 1.91
- mucho prototype changes
linux/fs/pagebuf/page_buf.c - 1.81
- Change object used for metadata handle from an inode to a special
structure containing an address space and the pagebuf cache for
the filesystem. This is passed around directly from xfs to pagebuf
rather than every pagebuf_get operation involving a search to map
from the inode to the pagebuf cache - that was just dumb.
linux/fs/pagebuf/page_buf_locking.c - 1.10
- Remove one level of indirection in looking up a pagebuf, gets rid of
lots of complexity in the code.
linux/fs/pagebuf/page_buf_io.c - 1.79
- Use new pagebuf_lookup function from one place in I/O path
|