Jason Lunz:
> I'm running aufs 20061126 on linux i386 2.6.22.14. The machine I'm using
> now is a vmware VM with 2 CPUs, but I've also reproduced similar crashes
> on real x86 hardware with older aufs versions.
I think it is a race condition in revalidating a dentry.
Will you try this patch?
Junjiro Okajima
----------------------------------------------------------------------
diff -x CVS -x RCS -x .pdiff -rup ../../aufs.anon/aufs/fs/aufs/dentry.c
./fs/aufs/dentry.c
--- ../../aufs.anon/aufs/fs/aufs/dentry.c 2007-11-12 10:43:52.000000000
+0900
+++ ./fs/aufs/dentry.c 2007-11-28 12:53:34.278509424 +0900
@@ -726,21 +726,20 @@ int au_refresh_hdentry(struct dentry *de
return npositive;
}
-static int h_d_revalidate(struct dentry *dentry, struct nameidata *nd,
- int do_udba)
+static int h_d_revalidate(struct dentry *dentry, struct inode *inode,
+ struct nameidata *nd, int do_udba)
{
int err, plus, locked, unhashed, is_root, h_plus, valid;
struct nameidata fake_nd, *p;
aufs_bindex_t bindex, btail, bstart, ibs, ibe;
struct super_block *sb;
- struct inode *inode, *first, *h_inode, *h_cached_inode;
+ struct inode *first, *h_inode, *h_cached_inode;
umode_t mode, h_mode;
struct dentry *h_dentry;
int (*reval)(struct dentry *, struct nameidata *);
struct qstr *name;
LKTRTrace("%.*s, nd %d\n", AuDLNPair(dentry), !!nd);
- inode = dentry->d_inode;
AuDebugOn(inode && au_digen(dentry) != au_iigen(inode));
err = 0;
@@ -1101,7 +1100,7 @@ static int aufs_d_revalidate(struct dent
&& au_test_higen(inode, au_h_iptr(inode)))
goto out;
ndp = au_dup_nd(sbinfo, &tmp_nd, nd);
- err = h_d_revalidate(dentry, ndp, do_udba);
+ err = h_d_revalidate(dentry, inode, ndp, do_udba);
//err = -1;
out:
@@ -1115,7 +1114,10 @@ static int aufs_d_revalidate(struct dent
#endif
au_store_fmode_exec(nd, inode);
- aufs_read_unlock(dentry, AuLock_IR);
+ if (inode)
+ ii_read_unlock(inode);
+ di_read_unlock(dentry, !AuLock_IR);
+ si_read_unlock(sb);
AuTraceErr(err);
valid = !err;
if (!valid)
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell. From the desktop to the data center, Linux is going
mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4