This problem was reported to the list a while ago as
"Errors using amanda/xfsdump" by Justin Tripp.
It proved to be a nasty problem which has been in there since the original
implementation, it is a hang over from an Irix / Linux different in what
comes first, the fs specific data or the fs independent data.
This is a reworking of the implementation based on a suggestion by Al Viro
to the linux-fsdevel list last year, thanks to Chris Mason for pointing
me at it.
I have pounded on it here, and so far I do not have any regressions.
Since this places us more in line with the way other linux filesystems
do things, and removes some code, it is obviously correct ;-). However,
please let me know if odd things start to happen to your machine
after you start using this code.
Steve
Date: Fri May 25 13:33:07 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:95990a
linux/kernel/ksyms.c - 1.89
- Export icreate4 unlock_new_inode to modules
linux/include/linux/fs.h - 1.93
- Add new prototype for icreate4 and unlock_new_inode
linux/fs/inode.c - 1.40
- Replace the xfs special ihold4 with icreate4 - this is a function
closer to iget, except it does not call read_inode but returns
a locked hashed inode for the caller to fill in. create_new_inode
was restructured some to allow for code reuse.
linux/fs/xfs/xfs_iget.c - 1.142
- Restructure xfs / linux inode interface, we used to have a deadlock
case
which we recognised with a panic. When xfs needs a new inode
internally
it goes through icreate, and if this returns a new inode, it calls
xfs_iget_core
to read the xfs inode off disk and fill it in. Various other cleanups
as
a result of this.
linux/fs/xfs/xfs_inode.h - 1.149
- prototype change
linux/fs/xfs/linux/xfs_vnode.c - 1.64
- Restructure xfs / linux inode interface, we used to have a deadlock
case
which we recognised with a panic. When xfs needs a new inode
internally
it goes through icreate, and if this returns a new inode, it calls
xfs_iget_core
to read the xfs inode off disk and fill it in. Various other cleanups
as
a result of this.
linux/fs/xfs/linux/xfs_vnode.h - 1.20
- Prototype changes and removals due to reworked interface
|