This is really two changes in one:
It is a fix for removal on a directory not always cleaning up the on disk
structures correctly. The division of reclaim into two components was wrong
for directories some of the time. It was also broken from user space and
causing xfs_repair to bomb out.
Secondly it contains the start of some work to let us have more control
from XFS of how metadata pagebufs are structured. Eventually it will let
us manipulate inode buffers without having to map them into one chunk
of kernel address space. It also fixes a bug where XFS wanted to do a
trylock on a buffer and pagebuf was always waiting for lock if there
was contention.
Date: Fri Jun 30 11:54:07 PDT 2000
Workarea: jen.cray.com:/src/lord/xfs-linux.2.4.0-test1
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.0-test1-xfs
Modid: 2.4.0-test1-xfs:slinx:65571a
linux/fs/xfs/xfs_ialloc.h - 1.38
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_ialloc.h.diff?r1=text&tr1=1.38&r2=text&tr2=1.37&f=h
- change how inode buffer offset is calculated to allow non-mapped inode
buffers.
linux/fs/xfs/xfs_ialloc.c - 1.137
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_ialloc.c.diff?r1=text&tr1=1.137&r2=text&tr2=1.136&f=h
- Explicitly pass buffer flags into a xfs_trans_get_buf call for an
inode
buffer. We will eventually turn off the XFS_BUF_MAPPED flag here.
linux/fs/xfs/xfs_buf.h - 1.53
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_buf.h.diff?r1=text&tr1=1.53&r2=text&tr2=1.52&f=h
- Add xfs_buf_offset() inline to return the address of an offset in a
buffer,
this will work even if the buffer has not been mapped.
Add xfs_buf_read_flags and xfs_buf_get_flags which let us pass more
flags from callers.
linux/fs/xfs/xfs_buf_item.c - 1.103
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_buf_item.c.diff?r1=text&tr1=1.103&r2=text&tr2=1.102&f=h
- replace XFS_BUF_PTR(bp) + buffer_offset with xfs_buf_offset(bp,
buffer_offset),
there needs to be more work here yet.
linux/fs/xfs/xfs_vnodeops.c - 1.458
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_vnodeops.c.diff?r1=text&tr1=1.458&r2=text&tr2=1.457&f=h
- fix xfs_reclaim and xfs_finish_reclaim so that a) they do the correct
locking for a directory which is being removed, and b) so that they
work
when called from xfs_repair code.
linux/fs/xfs/xfs_vfsops.c - 1.272
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_vfsops.c.diff?r1=text&tr1=1.272&r2=text&tr2=1.271&f=h
- pass extra state into xfs_finish_reclaim
linux/fs/xfs/xfs_inode.c - 1.292
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_inode.c.diff?r1=text&tr1=1.292&r2=text&tr2=1.291&f=h
- change how inode buffer offset is calculated to allow non-mapped inode
buffers.
linux/fs/xfs/xfs_inode.h - 1.137
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_inode.h.diff?r1=text&tr1=1.137&r2=text&tr2=1.136&f=h
- change prototypes for xfs_finish_reclaim and xfs_inotobp
linux/fs/xfs/xfs_trans_buf.c - 1.86
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_trans_buf.c.diff?r1=text&tr1=1.86&r2=text&tr2=1.85&f=h
- Allow callers of transaction buffer calls to specify locking and
mapping
flags, for now we end up passing the same flags down to pagebuf as
before,
but this gives us the option of turning mapping off for inode buffers.
linux/fs/xfs/linux/xfs_griostubs.c - 1.10
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_griostubs.c.diff?r1=text&tr1=1.10&r2=text&tr2=1.9&f=h
- Changes elsewhere required an extra include to make this build
linux/include/linux/page_buf.h - 1.51
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/include/linux/page_buf.h.diff?r1=text&tr1=1.51&r2=text&tr2=1.50&f=h
- add pagebuf_offset prototype
linux/fs/pagebuf/page_buf.c - 1.10
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/pagebuf/page_buf.c.diff?r1=text&tr1=1.10&r2=text&tr2=1.9&f=h
- For mapped pagebufs do not request highmem pages - we would need to
use
kmap on the data in order to access it. Most pages will be data pages,
and these can be highmem. Also add a pagebuf_offset function for
returning
the address of something within a pagebuf - only suitable for use on
those non highmem pages.
|