"Jrgen_P._Tjern":
> Sounds about right, except that I used umount -lf because I think some
> files were still open. :-)

I think I could reproduce your problem.
I hope this patch will solve it.

Junjiro Okajima


diff -x CVS -x RCS -x .pdiff -rup ../../sf.anon/aufs/fs/aufs/super.c 
./fs/aufs/super.c
--- ../../sf.anon/aufs/fs/aufs/super.c  2007-12-03 10:38:16.000000000 +0900
+++ ./fs/aufs/super.c   2008-01-23 14:11:29.000000000 +0900
@@ -282,7 +282,7 @@ static int aufs_statfs(struct super_bloc
        return err;
 }
 
-static void au_update_mnt(struct vfsmount *mnt)
+static void au_update_mnt(struct vfsmount *mnt, int flags)
 {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18)
        struct vfsmount *pos;
@@ -308,7 +308,7 @@ static void au_update_mnt(struct vfsmoun
                        sbinfo->si_mnt = pos;
                        break;
                }
-       AuDebugOn(!sbinfo->si_mnt);
+       AuDebugOn(!(flags & MNT_DETACH) && !sbinfo->si_mnt);
 #endif
 }
 
@@ -317,10 +317,12 @@ static void au_update_mnt(struct vfsmoun
 #if UmountBeginHasMnt
 #define UmountBeginSb(mnt)     (mnt)->mnt_sb
 #define UmountBeginMnt(mnt)    (mnt)
-static void aufs_umount_begin(struct vfsmount *arg, int flags)
+#define UmountBeginFlags       _flags
+static void aufs_umount_begin(struct vfsmount *arg, int _flags)
 #else
 #define UmountBeginSb(sb)      sb
 #define UmountBeginMnt(sb)     NULL
+#define UmountBeginFlags       0
 static void aufs_umount_begin(struct super_block *arg)
 #endif
 {
@@ -335,13 +337,11 @@ static void aufs_umount_begin(struct sup
                return;
 
        si_write_lock(sb);
-       if (AuFlag(sbinfo, f_plink))
-               au_put_plink(sb);
 #if 0 // remove
        if (unlikely(au_flag_test(sb, AuFlag_UDBA_INOTIFY)))
                shrink_dcache_sb(sb);
 #endif
-       au_update_mnt(mnt);
+       au_update_mnt(mnt, UmountBeginFlags);
 #if 0
        if (sbinfo->si_wbr_create_ops->fin)
                sbinfo->si_wbr_create_ops->fin(sb);
@@ -358,6 +358,8 @@ static void free_sbinfo(struct super_blo
        AuDebugOn(!sbinfo || !list_empty(&sbinfo->si_plink));
 
        si_write_lock(sb);
+       if (AuFlag(sbinfo, f_plink))
+               au_put_plink(sb);
        xino_clr(sb);
        free_branches(sbinfo);
        kfree(sbinfo->si_branch);

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

Reply via email to