At Tue, 25 Apr 2000 16:33:31 -0600,
Macy, Kip <Kip_Macy@xxxxxxxxxx> wrote:
> [1 <text/plain; iso-8859-1 (7bit)>]
> You will have to excuse me for being a bit slow - but what is different
> about XFS that
> makes it necessary for the Linux inode to know about the xfs vnode? I don't
> believe that
> any of the other file systems that Linux supports require that violation of
> the abstraction
I breaks down to a simple answer and a complicated one.
XFS was written on a vnode based system, linux on the other hand has
something of it's own abstraction layer; the linux inode.
The way thing currently operate XFS allocates a vnode whenever a file
is looked up, a back pointer is set up to reference the linux inode,
finally an xfs inode is created with the vnode pointing at it.
There are several reasons for this: First
XFS references members of the structure vnode_t throught the code,
changing everything to reference something different (say the linux
inode) requires A-LOT of work. (look at xfs_buf.h, which was done to
remove the buf_t).
Second vnode's are where the VOP_<calls> exist, which is how
stackable file-system hook together; a requirement for CXFS.
The linvfs stuff was created to bridge the linux
fs independent layer and a vnode based independent layer. But as you
can see adding another layer isn't without it problems.
Fixing this count problem is high on the priority list. In
looking at the problem we have discovered it will involve "major
surgery" to fix.
> -----Original Message-----
> From: Russell Cattelan [mailto:cattelan@xxxxxxxxxxx]
> Sent: Monday, April 24, 2000 11:32 PM
> To: Macy, Kip
> Cc: 'linux-xfs@xxxxxxxxxxx'
> Subject: Re: assertion failure in xfs_vnode.c:890
> "Macy, Kip" wrote:
> > The following just occurred when trying to mount an XFS partition over
> > NFS (on the local
> > machine). This is the most recent source.
> > XFS assertion failed:vp->v_count > 0, file: xfs_vnode.c:890
> Yup this is know problem.
> The problem occurs when ever the linux inode reference count gets
> iget does not communicate down to the xfs vnode if the count it already
> 1 or greater
> that the count has been incremented
> iput on the other hand will always communicate down to decrement the
> count thus giving us a v_count of 0 when it should be at least one.
> We are currently talking about how to fix this problem; which involves
> trying to merge the linux inode and the xfs vnode... which should prove
> to be a lot of work. :-(
> > ...
> > kernel BUG at xfs_debug.c:86!
> > due to panic@0xc01e2ef9
> > kdb> bt
> > assfail
> > vn_rele
> > linvfs_put_inode
> > iput
> > nfsd_iget
> > find_fh_dentry
> > fh_verify
> > nfsd_statfs
> > nfsd_proc_statfs
> > nfsd_dispatch
> > svc_process
> > nfsd
> > kernel_thread
> Russell Cattelan
> [2 <text/html; iso-8859-1 (quoted-printable)>]