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

Reply via email to