Hello community,
here is the log from the commit of package aufs
checked in at Wed Jan 30 17:54:39 CET 2008.
--------
--- aufs/aufs.changes 2008-01-24 22:18:22.000000000 +0100
+++ aufs/aufs.changes 2008-01-30 11:01:26.000000000 +0100
@@ -1,0 +2,6 @@
+Wed Jan 30 10:52:24 CET 2008 - duwe@suse.de
+
+- update to CVS 2008-01-28, fixing bugs (BNC)
+ #356902,#353881 and maybe #328798
+
+-------------------------------------------------------------------
Old:
----
aufs-cvs20071112.dif
aufs-cvs20080124.tar.bz2
New:
----
aufs-cvs20080128.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ aufs.spec ++++++
--- /var/tmp/diff_new_pack.h20589/_old 2008-01-30 17:53:47.000000000 +0100
+++ /var/tmp/diff_new_pack.h20589/_new 2008-01-30 17:53:47.000000000 +0100
@@ -1,5 +1,5 @@
#
-# spec file for package aufs (Version cvs20080124)
+# spec file for package aufs (Version cvs20080128)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -12,17 +12,18 @@
# Commandline:
Name: aufs
-BuildRequires: %kernel_module_package_buildreq e2fsprogs-devel kernel-source kernel-syms module-init-tools
+# BuildRequires: %kernel_module_package_buildreq e2fsprogs-devel kernel-source kernel-syms module-init-tools
+BuildRequires: e2fsprogs-devel kernel-source kernel-syms module-init-tools
License: GPL v2 or later
Group: System/Filesystems
-Version: cvs20080124
+Version: cvs20080128
Release: 1
Source0: aufs-%{version}.tar.bz2
Source100: preamble
Patch0: aa-hack
Patch1: local.mk-fix
Patch2: aufs-stack-protect-stub.diff
-Patch3: aufs-cvs20071112.dif
+# Patch3: aufs-cvs20071112.dif
Url: http://aufs.sf.net
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Summary: Utilities to Manipulate aufs Components
@@ -56,11 +57,11 @@
Junjiro Okajima
%prep
-%setup -q
+%setup -q -n aufs
%patch -p1
%patch1 -p1
%patch2 -p1
-%patch3
+# %patch3
%build
export EXTRA_CFLAGS="$RPM_OPT_FLAGS"
@@ -99,6 +100,9 @@
/usr/share/man/man?/*
%changelog
+* Wed Jan 30 2008 duwe@suse.de
+- update to CVS 2008-01-28, fixing bugs (BNC)
+ [#356902],#353881 and maybe #328798
* Thu Jan 24 2008 coolo@suse.de
- update to current cvs (20080124)
* Mon Nov 12 2007 ro@suse.de
++++++ aufs-cvs20080124.tar.bz2 -> aufs-cvs20080128.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/file.c new/aufs/fs/aufs/file.c
--- old/aufs-cvs20080124/fs/aufs/file.c 2008-01-21 05:56:10.000000000 +0100
+++ new/aufs/fs/aufs/file.c 2008-01-28 06:01:42.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: file.c,v 1.63 2008/01/21 04:56:10 sfjro Exp $ */
+/* $Id: file.c,v 1.64 2008/01/28 05:01:42 sfjro Exp $ */
//#include
#include
@@ -172,6 +172,7 @@
ii_read_lock_parent2(gparent->d_inode);
}
hdir_lock(h_dir, dir, bcpup);
+ //todo: test parent-gparent relationship
vfsub_i_lock_nested(h_inode, AuLsc_I_CHILD);
AuDebugOn(au_h_dptr_i(dentry, bcpup));
err = au_sio_cpup_simple(dentry, bcpup, -1, &cflags);
@@ -364,6 +365,7 @@
h_inode = h_dentry->d_inode;
dir = parent->d_inode;
hdir_lock(h_dir, dir, bcpup);
+ //todo: test parent-gparent relationship
vfsub_i_lock_nested(h_inode, AuLsc_I_CHILD);
if (d_unhashed(dentry) /* || d_unhashed(h_dentry) */
/* || !h_inode->i_nlink */) {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/i_op_add.c new/aufs/fs/aufs/i_op_add.c
--- old/aufs-cvs20080124/fs/aufs/i_op_add.c 2008-01-21 05:56:37.000000000 +0100
+++ new/aufs/fs/aufs/i_op_add.c 2008-01-28 06:02:00.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: i_op_add.c,v 1.57 2008/01/21 04:56:37 sfjro Exp $ */
+/* $Id: i_op_add.c,v 1.58 2008/01/28 05:02:00 sfjro Exp $ */
#include "aufs.h"
@@ -135,6 +135,18 @@
AuDbgSleep(DbgUdbaRace);
#endif
hdir_lock(h_dir, dir, bcpup);
+
+ /*
+ * someone else might change our parent-child relationship directly,
+ * bypassing aufs, while we are handling a systemcall for aufs.
+ */
+ wh_dentry = ERR_PTR(-EIO);
+ if (unlikely(h_parent != au_h_dptr_i(dentry, bcpup)->d_parent))
+ goto out_dir;
+#if 0
+ revalidate h_negative
+#endif
+
if (dt)
au_dtime_store(dt, parent, h_parent, hgdir);
wh_dentry = NULL;
@@ -147,9 +159,10 @@
//ndx.br = NULL;
wh_dentry = lkup_wh(h_parent, &dentry->d_name, &ndx);
//wh_dentry = ERR_PTR(-1);
+
+ out_dir:
if (IS_ERR(wh_dentry))
hdir_unlock(h_dir, dir, bcpup);
-
out:
AuTraceErrPtr(wh_dentry);
return wh_dentry;
@@ -178,7 +191,7 @@
static int add_simple(struct inode *dir, struct dentry *dentry,
struct simple_arg *arg)
{
- int err, dlgt;
+ int err, dlgt, created;
struct dentry *h_dentry, *h_parent, *wh_dentry, *parent;
struct inode *h_dir;
struct au_dtime dt;
@@ -232,12 +245,13 @@
#else
err = -1;
#endif
+ created = !err;
if (!err)
err = epilog(dir, wh_dentry, dentry);
//err = -1;
/* revert */
- if (unlikely(err && h_dentry->d_inode)) {
+ if (unlikely(created && err && h_dentry->d_inode)) {
int rerr;
vfsub_args_init(&vargs, NULL, dlgt, 0);
rerr = vfsub_unlink(h_dir, h_dentry, &vargs);
@@ -313,19 +327,19 @@
struct link_arg *a)
{
int err;
- struct inode *hi, *h_dir, *src_dir, *ghdir;
+ struct inode *hi, *h_dir, *src_dir, *gdir;
struct au_cpup_flags cflags;
struct dentry *gparent;
AuTraceEnter();
gparent = NULL;
- ghdir = NULL;
+ gdir = NULL;
if (unlikely(au_flag_test_udba_inotify(src_dentry->d_sb)
&& !IS_ROOT(a->src_parent))) {
gparent = dget_parent(a->src_parent);
- ghdir = gparent->d_inode;
- if (ghdir == dir) {
+ gdir = gparent->d_inode;
+ if (gdir == dir) {
dput(gparent);
gparent = NULL;
}
@@ -346,15 +360,16 @@
//todo: meaningless lock if CONFIG_AUFS_DEBUG is disabled.
if (unlikely(gparent))
- ii_read_lock_parent3(ghdir);
+ ii_read_lock_parent3(gdir);
h_dir = au_h_iptr_i(src_dir, a->bdst);
hdir_lock(h_dir, src_dir, a->bdst);
} else if (unlikely(gparent)) {
/* this temporary unlock/lock is safe */
hdir_unlock(a->h_dir, dir, a->bdst);
- ii_read_lock_parent3(ghdir);
+ ii_read_lock_parent3(gdir);
hdir_lock(a->h_dir, dir, a->bdst);
}
+ //todo: test parent-gparent relationship
cflags.dtime = 1;
hi = au_h_dptr(src_dentry)->d_inode;
@@ -364,7 +379,7 @@
vfsub_i_unlock(hi);
if (unlikely(gparent)) {
- ii_read_unlock(ghdir);
+ ii_read_unlock(gdir);
dput(gparent);
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/i_op.c new/aufs/fs/aufs/i_op.c
--- old/aufs-cvs20080124/fs/aufs/i_op.c 2008-01-21 05:56:20.000000000 +0100
+++ new/aufs/fs/aufs/i_op.c 2008-01-28 06:01:42.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: i_op.c,v 1.52 2008/01/21 04:56:20 sfjro Exp $ */
+/* $Id: i_op.c,v 1.53 2008/01/28 05:01:42 sfjro Exp $ */
//#include
//#include
@@ -516,6 +516,9 @@
if (!err)
hi_wh = au_hi_wh(inode, bcpup);
}
+#if 0
+ revalidate hi_wh
+#endif
}
//err = -1;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/i_op_del.c new/aufs/fs/aufs/i_op_del.c
--- old/aufs-cvs20080124/fs/aufs/i_op_del.c 2008-01-21 05:56:37.000000000 +0100
+++ new/aufs/fs/aufs/i_op_del.c 2008-01-28 06:02:03.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: i_op_del.c,v 1.56 2008/01/21 04:56:37 sfjro Exp $ */
+/* $Id: i_op_del.c,v 1.57 2008/01/28 05:02:03 sfjro Exp $ */
#include "aufs.h"
@@ -140,15 +140,17 @@
AuDbgSleep(DbgUdbaRace);
#endif
hdir_lock(h_dir, dir, bcpup);
-#if 0
+
/*
* someone else might change our parent-child relationship directly,
* bypassing aufs, while we are handling a systemcall for aufs.
*/
wh_dentry = ERR_PTR(-ENOENT);
- if (unlikely(h_parent != au_h_dptr_i(dentry, bcpup)->d_parent))
+ if (unlikely(dbstart(dentry) == bcpup
+ && h_parent != au_h_dptr_i(dentry, bcpup)->d_parent))
goto out_dir;
- //if (au_digen(dentry) == sgen)
+#if 0
+ revalidate h_positive
#endif
au_dtime_store(dt, parent, h_parent, hgdir);
@@ -166,7 +168,7 @@
goto out; /* success */
/* returns with the parent is locked and wh_dentry is DGETed */
- //out_dir:
+ out_dir:
hdir_unlock(h_dir, dir, bcpup);
out:
AuTraceErrPtr(wh_dentry);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/i_op_ren.c new/aufs/fs/aufs/i_op_ren.c
--- old/aufs-cvs20080124/fs/aufs/i_op_ren.c 2008-01-21 05:56:10.000000000 +0100
+++ new/aufs/fs/aufs/i_op_ren.c 2008-01-28 06:02:03.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: i_op_ren.c,v 1.62 2008/01/21 04:56:10 sfjro Exp $ */
+/* $Id: i_op_ren.c,v 1.63 2008/01/28 05:02:03 sfjro Exp $ */
#include "aufs.h"
@@ -576,8 +576,30 @@
p->a.h_parent[DST] = au_h_dptr_i(p->a.parent[DST], p->a.btgt);
dirs[0] = src_dir;
dirs[1] = dir;
+#ifdef DbgUdbaRace
+ AuDbgSleep(DbgUdbaRace);
+#endif
hdir_lock_rename(p->a.h_parent, dirs, p->a.btgt, p->a.issamedir);
+ /*
+ * someone else might change our parent-child relationship directly,
+ * bypassing aufs, while we are handling a systemcall for aufs.
+ */
+ err = -ENOENT;
+ if (unlikely(p->a.bstart[SRC] == p->a.btgt
+ && p->a.h_parent[SRC]
+ != au_h_dptr_i(src_dentry, p->a.btgt)->d_parent))
+ goto out_hdir;
+ err = -EIO;
+ if (unlikely(p->a.bstart[DST] == p->a.btgt
+ && p->a.h_parent[DST]
+ != au_h_dptr_i(dentry, p->a.btgt)->d_parent))
+ goto out_hdir;
+#if 0
+ // revalidate h_dentries
+ // test parent-gparent relationship
+#endif
+
/* store timestamps to be revertible */
au_dtime_store(p->dt[PARENT] + SRC, p->a.parent[SRC],
p->a.h_parent[SRC], hgdir[SRC]);
@@ -692,6 +714,7 @@
vfsub_i_unlock(hd->d_inode);
}
}
+ out_hdir:
hdir_unlock_rename(p->a.h_parent, dirs, p->a.btgt, p->a.issamedir);
out_children:
nhash_fin(&p->a.whlist);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/super.c new/aufs/fs/aufs/super.c
--- old/aufs-cvs20080124/fs/aufs/super.c 2007-12-03 02:38:16.000000000 +0100
+++ new/aufs/fs/aufs/super.c 2008-01-28 06:02:15.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: super.c,v 1.72 2007/12/03 01:38:16 sfjro Exp $ */
+/* $Id: super.c,v 1.73 2008/01/28 05:02:15 sfjro Exp $ */
#include
#include
@@ -282,7 +282,7 @@
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 @@
sbinfo->si_mnt = pos;
break;
}
- AuDebugOn(!sbinfo->si_mnt);
+ AuDebugOn(!(flags & MNT_DETACH) && !sbinfo->si_mnt);
#endif
}
@@ -317,10 +317,12 @@
#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
{
@@ -341,7 +343,7 @@
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);
@@ -633,6 +635,8 @@
opts.max_opt = PAGE_SIZE / sizeof(*opts.opt);
opts.remount = 1;
+ //todo: writeback everything on branches.
+
/* parse it before aufs lock */
err = au_opts_parse(sb, data, &opts);
//if (LktrCond) {au_free_opts(&opts); err = -1;}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/vfsub.c new/aufs/fs/aufs/vfsub.c
--- old/aufs-cvs20080124/fs/aufs/vfsub.c 2007-12-17 04:30:37.000000000 +0100
+++ new/aufs/fs/aufs/vfsub.c 2008-01-28 06:01:42.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: vfsub.c,v 1.25 2007/12/17 03:30:37 sfjro Exp $ */
+/* $Id: vfsub.c,v 1.26 2008/01/28 05:01:42 sfjro Exp $ */
// I'm going to slightly mad
#include "aufs.h"
@@ -81,6 +81,219 @@
/* ---------------------------------------------------------------------- */
+#if 0
+int do_vfsub_create(struct inode *dir, struct dentry *dentry, int mode,
+ struct nameidata *nd)
+{
+ int err;
+ struct dentry *parent;
+ struct vfsmount *mnt;
+
+ LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
+
+ err = -EIO;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ err = vfs_create(dir, dentry, mode, nd);
+ }
+ if (!err) {
+ mnt = NULL;
+ if (nd)
+ mnt = nd->mnt;
+ au_update_fuse_h_inode(mnt, parent); /*ignore*/
+ au_update_fuse_h_inode(mnt, dentry); /*ignore*/
+ }
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_symlink(struct inode *dir, struct dentry *dentry,
+ const char *symname, int mode)
+{
+ int err;
+ struct dentry *parent;
+
+ LKTRTrace("i%lu, %.*s, %s, 0x%x\n",
+ dir->i_ino, AuDLNPair(dentry), symname, mode);
+
+ err = -EIO;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ err = vfs_symlink(dir, dentry, symname, mode);
+ }
+ if (!err) {
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ au_update_fuse_h_inode(NULL, dentry); /*ignore*/
+ }
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_mknod(struct inode *dir, struct dentry *dentry, int mode,
+ dev_t dev)
+{
+ int err;
+ struct dentry *parent;
+
+ LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
+
+ err = -EIO;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ err = vfs_mknod(dir, dentry, mode, dev);
+ }
+ if (!err) {
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ au_update_fuse_h_inode(NULL, dentry); /*ignore*/
+ }
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_mkdir(struct inode *dir, struct dentry *dentry, int mode)
+{
+ int err;
+ struct dentry *parent;
+
+ LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
+
+ err = -EIO;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ err = vfs_mkdir(dir, dentry, mode);
+ }
+ if (!err) {
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ au_update_fuse_h_inode(NULL, dentry); /*ignore*/
+ }
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_link(struct dentry *src_dentry, struct inode *dir,
+ struct dentry *dentry)
+{
+ int err;
+ struct dentry *parent;
+
+ LKTRTrace("%.*s, i%lu, %.*s\n",
+ AuDLNPair(src_dentry), dir->i_ino, AuDLNPair(dentry));
+
+ err = -EIO;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ lockdep_off();
+ err = vfs_link(src_dentry, dir, dentry);
+ lockdep_on();
+ }
+ if (!err) {
+ LKTRTrace("src_i %p, dst_i %p\n",
+ src_dentry->d_inode, dentry->d_inode);
+ /* fuse has different memory inode for the same inumber */
+ au_update_fuse_h_inode(NULL, src_dentry); /*ignore*/
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ au_update_fuse_h_inode(NULL, dentry); /*ignore*/
+ }
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_rename(struct inode *src_dir, struct dentry *src_dentry,
+ struct inode *dir, struct dentry *dentry)
+{
+ int err;
+ struct dentry *parent, *src_parent;
+
+ LKTRTrace("i%lu, %.*s, i%lu, %.*s\n",
+ src_dir->i_ino, AuDLNPair(src_dentry),
+ dir->i_ino, AuDLNPair(dentry));
+
+ err = -ENOENT;
+ parent = NULL;
+ src_parent = dget_parent(src_dentry);
+ if (src_parent->d_inode == src_dir) {
+ err = -EIO;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir)
+ err = 0;
+ }
+ if (!err) {
+ IMustLock(dir);
+ IMustLock(src_dir);
+ lockdep_off();
+ err = vfs_rename(src_dir, src_dentry, dir, dentry);
+ lockdep_on();
+ AuTraceErr(err);
+ }
+ if (!err) {
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ au_update_fuse_h_inode(NULL, src_parent); /*ignore*/
+ au_update_fuse_h_inode(NULL, src_dentry); /*ignore*/
+ }
+ dput(parent);
+ dput(src_parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_rmdir(struct inode *dir, struct dentry *dentry)
+{
+ int err;
+ struct dentry *parent;
+
+ LKTRTrace("i%lu, %.*s\n", dir->i_ino, AuDLNPair(dentry));
+
+ err = -ENOENT;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ lockdep_off();
+ err = vfs_rmdir(dir, dentry);
+ lockdep_on();
+ }
+ if (!err)
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+
+int do_vfsub_unlink(struct inode *dir, struct dentry *dentry)
+{
+ int err;
+ struct dentry *parent;
+
+ LKTRTrace("i%lu, %.*s\n", dir->i_ino, AuDLNPair(dentry));
+
+ err = -ENOENT;
+ parent = dget_parent(dentry);
+ if (parent->d_inode == dir) {
+ IMustLock(dir);
+ /* vfs_unlink() locks inode */
+ lockdep_off();
+ err = vfs_unlink(dir, dentry);
+ lockdep_on();
+ }
+ if (!err)
+ au_update_fuse_h_inode(NULL, parent); /*ignore*/
+ dput(parent);
+ AuTraceErr(err);
+ return err;
+}
+#endif
+
+/* ---------------------------------------------------------------------- */
+
#if defined(CONFIG_AUFS_DLGT) || defined(CONFIG_AUFS_HINOTIFY)
struct permission_args {
int *errp;
@@ -919,7 +1132,7 @@
LKTRTrace("%.*s, stop_silly %d, cnt %d\n",
AuDLNPair(a->dentry), stop_sillyrename,
atomic_read(&a->dentry->d_count));
- IMustLock(a->dir);
+ //IMustLock(a->dir);
if (!stop_sillyrename)
dget(a->dentry);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/vfsub.h new/aufs/fs/aufs/vfsub.h
--- old/aufs-cvs20080124/fs/aufs/vfsub.h 2008-01-21 05:57:02.000000000 +0100
+++ new/aufs/fs/aufs/vfsub.h 2008-01-28 06:01:42.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: vfsub.h,v 1.27 2008/01/21 04:57:02 sfjro Exp $ */
+/* $Id: vfsub.h,v 1.28 2008/01/28 05:01:42 sfjro Exp $ */
#ifndef __AUFS_VFSUB_H__
#define __AUFS_VFSUB_H__
@@ -329,6 +329,21 @@
/* ---------------------------------------------------------------------- */
+#if 0
+int do_vfsub_create(struct inode *dir, struct dentry *dentry, int mode,
+ struct nameidata *nd);
+int do_vfsub_symlink(struct inode *dir, struct dentry *dentry,
+ const char *symname, int mode);
+int do_vfsub_mknod(struct inode *dir, struct dentry *dentry, int mode,
+ dev_t dev);
+int do_vfsub_link(struct dentry *src_dentry, struct inode *dir,
+ struct dentry *dentry);
+int do_vfsub_rename(struct inode *src_dir, struct dentry *src_dentry,
+ struct inode *dir, struct dentry *dentry);
+int do_vfsub_mkdir(struct inode *dir, struct dentry *dentry, int mode);
+int do_vfsub_rmdir(struct inode *dir, struct dentry *dentry);
+int do_vfsub_unlink(struct inode *dir, struct dentry *dentry);
+#else
static inline
int do_vfsub_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
@@ -486,6 +501,7 @@
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
return err;
}
+#endif
/* ---------------------------------------------------------------------- */
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/fs/aufs/whout.c new/aufs/fs/aufs/whout.c
--- old/aufs-cvs20080124/fs/aufs/whout.c 2007-11-12 02:43:10.000000000 +0100
+++ new/aufs/fs/aufs/whout.c 2008-01-28 06:01:42.000000000 +0100
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: whout.c,v 1.29 2007/11/12 01:43:10 sfjro Exp $ */
+/* $Id: whout.c,v 1.30 2008/01/28 05:01:42 sfjro Exp $ */
#include
#include
@@ -546,6 +546,9 @@
AuDebugOn(!h_dir->i_op || !h_dir->i_op->link);
vfsub_args_init(&vargs, NULL, /*dlgt*/0, 0);
hdir_lock(h_dir, dir, bindex);
+#if 0
+ revalidate h_wh
+#endif
br_wh_write_lock(a->br);
err = vfsub_unlink(h_dir, a->br->br_wh, &vargs);
//if (LktrCond) err = -1;
@@ -995,6 +998,9 @@
ii_write_lock_child(a->inode);
ii_write_lock_parent(a->dir);
hdir_lock(h_dir, a->dir, a->bindex);
+#if 0
+ revalidate h_dentry
+#endif
err = rmdir_whtmp(a->h_dentry, &a->whlist, a->bindex,
a->dir, a->inode, a->noself);
hdir_unlock(h_dir, a->dir, a->bindex);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/History new/aufs/History
--- old/aufs-cvs20080124/History 2008-01-21 05:58:20.000000000 +0100
+++ new/aufs/History 2008-01-28 06:04:02.000000000 +0100
@@ -2,10 +2,10 @@
History of aufs
Junjiro Okajima
-# $Id: History,v 1.61 2008/01/21 04:58:20 sfjro Exp $
+# $Id: History,v 1.63 2008/01/28 05:04:02 sfjro Exp $
Note:
-- the described date are all in JST.
+- the described dates are all in JST.
- CVS handles UTC as its timezone.
- all these descriptions should be archived in the ML on sourceforge,
since I always post there and let users know. But sometimes archiving
@@ -13,6 +13,12 @@
----------------------------------------------------------------------
+20080128
+- bugfix: support for lazy unmount on linux-2.6.18 and later, reported
+ by Jorgen P. Tjerno.
+- bugfix: a race condition between udba and aufs (unfnished).
+- debugging a race condition between udba and aufs.
+
20080121
- new sample chroot-ed/jail environment useing aufs.
- bugfix: consolidate make targets for parallel build (make -j3),
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/include/linux/aufs_type.h new/aufs/include/linux/aufs_type.h
--- old/aufs-cvs20080124/include/linux/aufs_type.h 2008-01-21 05:57:12.000000000 +0100
+++ new/aufs/include/linux/aufs_type.h 2008-01-28 06:02:33.000000000 +0100
@@ -16,14 +16,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-/* $Id: aufs_type.h,v 1.89 2008/01/21 04:57:12 sfjro Exp $ */
+/* $Id: aufs_type.h,v 1.90 2008/01/28 05:02:33 sfjro Exp $ */
#include
#ifndef __AUFS_TYPE_H__
#define __AUFS_TYPE_H__
-#define AUFS_VERSION "20080121"
+#define AUFS_VERSION "20080128"
/* move this to linux-2.6.19/include/magic.h */
#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/aufs-cvs20080124/README new/aufs/README
--- old/aufs-cvs20080124/README 2008-01-21 05:57:48.000000000 +0100
+++ new/aufs/README 2008-01-28 06:02:33.000000000 +0100
@@ -2,7 +2,7 @@
Aufs -- Another Unionfs
Junjiro Okajima
-# $Id: README,v 1.68 2008/01/21 04:57:48 sfjro Exp $
+# $Id: README,v 1.69 2008/01/28 05:02:33 sfjro Exp $
0. Introduction
@@ -75,6 +75,7 @@
- permanent xino files
(next work)
+- a race condition between udba and aufs.
- an option for refreshing the opened files after add/del branches
- 'move' policy for copy-up between two writable branches, after
checking free space.
@@ -306,7 +307,7 @@
if your kernel is not plain, for example modified by distributor,
the url where i can download its source is necessary too.
- aufs version which was printed at loading the module or booting the
- system
+ system, instead of the date you downloaded.
- configuration (define/undefine CONFIG_AUFS_xxx, or plain local.mk is
used or not)
- behaviour which you think to be incorrect
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org