Thanks for the analysis and a patch. Applied.
Charles
On Mon, 2005-10-10 at 16:23 -0400, Shaya Potter wrote:
> so this is what I killed my weekend (until 10 minutes ago) on trying to
> debug.
>
> unionfs_d_revalidate
>
> if parent needs to be revalidate
>
> locks parent
> calling d_parent->d_op->revalidate
>
> which is unionfs_d_revalidate_wrap
>
> unionfs_d_revalidate_wrap starts off by trying to lock the dentry.
>
> boom, deadlock.
>
> --- dentry.c.old 2005-10-10 20:23:10.000000000 +0000
> +++ dentry.c 2005-10-10 20:23:22.000000000 +0000
> @@ -77,15 +77,12 @@
> unlock_super(dentry->d_sb);
> locked = 0;
> /* We must be locked before our parent. */
> - lock_dentry(dentry->d_parent);
> if (!
> (dentry->d_parent->d_op->
> d_revalidate(dentry->d_parent, nd))) {
> - unlock_dentry(dentry->d_parent);
> invalid = 1;
> goto out;
> }
> - unlock_dentry(dentry->d_parent);
> restart = 1;
> goto restart;
> }
>
> now a different bug rears its ugly head
>
> ASSERTION FAILED: stopd(sb)->usi_firstputmap <= generation
> at /root/unionfs-sparse/commonfops.c:36 (branchput_gen)
>
> digging in I go.
>
> _______________________________________________
> unionfs mailing list
> [email protected]
> http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs
_______________________________________________
unionfs mailing list
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs