Moving the XFS vnode into the linux inode, solving several major
issues with inode re-use.
Now, XFS can be NFS exported.
Some aspects of the unlink path seem to "push" the buffer/page_buf
complex fairly hard, encountering a locking bug that can also occur
without this change with sufficient stress.
This change has been run with DEBUG on/off, Vnode Tracing on/off,
and PageBufMetaData on/off.
Modid: 2.3.99pre2-xfs:slinx:62680a
Date: Wed May 24 15:10:51 PDT 2000
Workarea: tiki.cray.com:/data/clink/io/jtk/work-linuxvnode
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.3.99pre2-xfs
linux/include/linux/behavior.h - 1.1
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/include/linux/behavior.h.diff?r1=text&tr1=1.1&r2=text&tr2=1.0&f=h
- New file. More visible definition of 'behavior' structures.
linux/include/linux/vnode.h - 1.1
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/include/linux/vnode.h.diff?r1=text&tr1=1.1&r2=text&tr2=1.0&f=h
- New file. More visible definition of 'vnode' structures.
linux/net/sunrpc/sched.c - 1.6
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/net/sunrpc/sched.c.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h
- Move an irritating printk under RPC_DEBUG.
linux/mm/filemap.c - 1.39
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/mm/filemap.c.diff?r1=text&tr1=1.39&r2=text&tr2=1.38&f=h
- Define the wait_queue_head pbd_waitq.
linux/kernel/ksyms.c - 1.45
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/kernel/ksyms.c.diff?r1=text&tr1=1.45&r2=text&tr2=1.44&f=h
- Export 'pdb_waitq', used by pagebuf_daemon/XFS_pbflush.
linux/include/linux/mm.h - 1.31
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/include/linux/mm.h.diff?r1=text&tr1=1.31&r2=text&tr2=1.30&f=h
- Add extern for pbd_waitq.
cmd/xfs/sim/src/vnode.c - 1.53
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/cmd/xfs/sim/src/vnode.c.diff?r1=text&tr1=1.53&r2=text&tr2=1.52&f=h
- Change calling parameters on libsim's vn_get() & vn_alloc()
to match the kernel side.
linux/fs/page_buf.c - 1.97
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/page_buf.c.diff?r1=text&tr1=1.97&r2=text&tr2=1.96&f=h
- Clean up the pagebuf_delwri_flush routine, it had several
bugs that would cause looping on the queues.
Make the "walkq" traces more unique.
linux/fs/xfs/xfsidbg.c - 1.143
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfsidbg.c.diff?r1=text&tr1=1.143&r2=text&tr2=1.142&f=h
- Rework "vnode" & "vntrace" commands.
Add "vn" command: prints inode, vnode & vntrace all
from one vnode address.
Add "vntraceaddr" command to print the vntrace if
all you have is the trace buffer address.
linux/fs/xfs/xfs_log.c - 1.217
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_log.c.diff?r1=text&tr1=1.217&r2=text&tr2=1.216&f=h
- Call XFS_bflush() out of xfs_log_force() to push out
the metadata pages when CONFIG_PAGE_BUF_META is true.
linux/fs/xfs/xfs_quota_priv.h - 1.11
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_quota_priv.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h
- Change the XFS_PURGE_INODE macro to take the XFS
inode address instead of the vnode, change the
VMAP call made inside this macro.
linux/fs/xfs/xfs_rw.c - 1.314
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_rw.c.diff?r1=text&tr1=1.314&r2=text&tr2=1.313&f=h
- Use 'vn_count()' to check the reference count.
linux/fs/xfs/xfs_buf.h - 1.51
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_buf.h.diff?r1=text&tr1=1.51&r2=text&tr2=1.50&f=h
- Add definition/prototype for XFS_pbflush().
linux/fs/xfs/xfs_vnodeops.c - 1.452
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_vnodeops.c.diff?r1=text&tr1=1.452&r2=text&tr2=1.451&f=h
- Use 'vn_count()' to check the reference count.
Add some vn_trace_'s.
linux/fs/xfs/xfs_rtalloc.c - 1.60
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_rtalloc.c.diff?r1=text&tr1=1.60&r2=text&tr2=1.59&f=h
- Add the XFS inode pointer to VMAP calls.
linux/fs/xfs/xfs_qm_syscalls.c - 1.37
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_qm_syscalls.c.diff?r1=text&tr1=1.37&r2=text&tr2=1.36&f=h
- Change vn_get calls.
linux/fs/xfs/xfs_log_recover.c - 1.181
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_log_recover.c.diff?r1=text&tr1=1.181&r2=text&tr2=1.180&f=h
- Minor fix in a console message.
linux/fs/xfs/xfs_vfsops.c - 1.268
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_vfsops.c.diff?r1=text&tr1=1.268&r2=text&tr2=1.267&f=h
- Use 'vn_count()' to check the reference count.
linux/fs/xfs/xfs_iget.c - 1.115
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_iget.c.diff?r1=text&tr1=1.115&r2=text&tr2=1.114&f=h
- Change vn_get/vn_alloc calls.
linux/fs/xfs/xfs_mount.c - 1.224
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_mount.c.diff?r1=text&tr1=1.224&r2=text&tr2=1.223&f=h
- Add the XFS inode pointer to VMAP calls.
linux/fs/xfs/xfs_qm.c - 1.49
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_qm.c.diff?r1=text&tr1=1.49&r2=text&tr2=1.48&f=h
linux/fs/xfs/xfs_inode.c - 1.288
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_inode.c.diff?r1=text&tr1=1.288&r2=text&tr2=1.287&f=h
- Use 'vn_count()' to check the reference count.
linux/fs/xfs/xfs_inode.h - 1.135
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/xfs_inode.h.diff?r1=text&tr1=1.135&r2=text&tr2=1.134&f=h
- Add XFS_IRECLAIM flag for debugging.
linux/fs/xfs/pseudo-inc/sys/vnode.h - 1.21
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/pseudo-inc/sys/vnode.h.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h
- Move a substantial portion to linux/include/linux/vnode.h
linux/fs/xfs/pseudo-inc/ksys/behavior.h - 1.7
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/pseudo-inc/ksys/behavior.h.diff?r1=text&tr1=1.7&r2=text&tr2=1.6&f=h
- Move a substantial portion to linux/include/linux/behavior.h
linux/fs/xfs/linux/xfs_lrw.c - 1.40
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_lrw.c.diff?r1=text&tr1=1.40&r2=text&tr2=1.39&f=h
- Add the XFS_pbflush() routine.
In xfs_trigger_io add a call to 'wake up' the
pagebuf daemon.
linux/fs/xfs/linux/xfs_file.c - 1.29
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_file.c.diff?r1=text&tr1=1.29&r2=text&tr2=1.28&f=h
- Add ASSERT's after inode to vnode address conversion.
linux/fs/xfs/linux/xfs_vnode.c - 1.24
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_vnode.c.diff?r1=text&tr1=1.24&r2=text&tr2=1.23&f=h
- Major gutting! Remove all routines that were involved
in maintaining the vnode cache & vnode freelist mechanisms.
Vn_alloc now does a linux 'iget', vn_get does a linux 'igrab',
vn_put does a linux 'iput'.
Vn_hold/rele use the linux inode i_count.
Vn_count provides a 'sample' of the reference count.
Vn_address determines if it's 'safe' to return a vnode address.
Vn_initialize sets up an XFS vnode within the linux inode;
called out of 'read_inode'.
Vn_revalidate updates the linux inode from the XFS inode at
xfs_iget time.
Vn_remove tears down, purges, inactivates, flushes, and
otherwise disposes of an XFS vnode, leaving it unaddressable
out of the linux inode.
Change the vn_trace_ routines to trace inode->i_count.
linux/fs/xfs/linux/xfs_super.c - 1.66
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_super.c.diff?r1=text&tr1=1.66&r2=text&tr2=1.65&f=h
- Only use the 'read_inode', 'delete_inode' & 'clear_inode'
methds, anything else is 'advisory' in terms of when
the XFS vnode could be purged.
Minor changes in 'put_super' allowing for the different
reference counts held on the root inode/vnode.
linux/fs/xfs/linux/xfs_iops.c - 1.49
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_iops.c.diff?r1=text&tr1=1.49&r2=text&tr2=1.48&f=h
- Minor re-arrangement allowing for the differents
location/initialization of the vnode.
Add ASSERT's after inode to vnode address conversion.
linux/fs/xfs/linux/xfs_iops.h - 1.6
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_iops.h.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h
- Prototypes for linvfs_revalidate_core() and
linvfs_set_inode_ops().
linux/include/linux/xfs_fs_i.h - 1.5
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/include/linux/xfs_fs_i.h.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h
- Define the vnode within the inode 'file system private' union.
linux/kdb/modules/kdbm_pb.c - 1.20
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/kdb/modules/kdbm_pb.c.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h
- Update the 'inode' kdb command.
linux/include/linux/page_buf_trace.h - 1.9
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/include/linux/page_buf_trace.h.diff?r1=text&tr1=1.9&r2=text&tr2=1.8&f=h
- Make the "walkq" traces more unique.
linux/fs/xfs/linux/xfs_ioctl.c - 1.5
http://oss.sgi.com/cgi-bin/cvsweb.cgi/linux-2.4-xfs/linux/fs/xfs/linux/xfs_ioctl.c.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h
- Remove extraneous 'iget', made unnecessary now
that xfs_iget/vn_get/vn_alloc does it.
|