[aufs] Update to aufs3.2-20120827

svn path=/dists/sid/linux/; revision=19431
This commit is contained in:
Ben Hutchings 2012-10-10 05:43:52 +00:00
parent 83875478c6
commit f0fc49f73a
2 changed files with 133 additions and 99 deletions

2
debian/changelog vendored
View File

@ -6,6 +6,8 @@ linux (3.2.30-2) UNRELEASED; urgency=low
* SUNRPC: Set alloc_slot for backchannel tcp ops (regression in 3.2.30)
* iwlwifi: Do not request unreleased firmware for IWL6000 (Closes: #689416)
* [rt] Update to 3.2.30-rt45
* [aufs] Update to aufs3.2-20120827:
- Fix statfs() values when different block sizes are in use
-- Ben Hutchings <ben@decadent.org.uk> Sat, 29 Sep 2012 14:19:46 +0200

View File

@ -205,7 +205,7 @@
+ When aufs supports Magic SysRq, enabled automatically.
+endif
--- a/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/Makefile 2012-01-10 02:15:56.545455955 +0000
+++ b/fs/aufs/Makefile 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,42 @@
+
+include ${src}/magic.mk
@ -313,7 +313,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_H__ */
--- a/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/branch.c 2012-01-10 02:15:56.545455955 +0000
+++ b/fs/aufs/branch.c 2012-10-10 06:26:21.201348727 +0100
@@ -0,0 +1,1169 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -570,12 +570,12 @@
+ if ((h_inode->i_mode & S_IALLUGO) != (inode->i_mode & S_IALLUGO)
+ || h_inode->i_uid != inode->i_uid
+ || h_inode->i_gid != inode->i_gid)
+ pr_warning("uid/gid/perm %s %u/%u/0%o, %u/%u/0%o\n",
+ add->pathname,
+ inode->i_uid, inode->i_gid,
+ (inode->i_mode & S_IALLUGO),
+ h_inode->i_uid, h_inode->i_gid,
+ (h_inode->i_mode & S_IALLUGO));
+ pr_warn("uid/gid/perm %s %u/%u/0%o, %u/%u/0%o\n",
+ add->pathname,
+ inode->i_uid, inode->i_gid,
+ (inode->i_mode & S_IALLUGO),
+ h_inode->i_uid, h_inode->i_gid,
+ (h_inode->i_mode & S_IALLUGO));
+ }
+
+out:
@ -1170,8 +1170,8 @@
+ /* revert */
+ rerr = au_br_init_wh(sb, br, br->br_perm, del->h_path.dentry);
+ if (rerr)
+ pr_warning("failed re-creating base whiteout, %s. (%d)\n",
+ del->pathname, rerr);
+ pr_warn("failed re-creating base whiteout, %s. (%d)\n",
+ del->pathname, rerr);
+out:
+ return err;
+}
@ -1759,7 +1759,7 @@
+
+-include ${srctree}/${src}/conf_priv.mk
--- a/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/cpup.c 2012-03-20 03:45:28.417045299 +0000
+++ b/fs/aufs/cpup.c 2012-10-10 06:26:21.205348749 +0100
@@ -0,0 +1,1079 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -1902,7 +1902,7 @@
+
+ err = vfsub_notify_change(&dt->dt_h_path, &attr);
+ if (unlikely(err))
+ pr_warning("restoring timestamps failed(%d). ignored\n", err);
+ pr_warn("restoring timestamps failed(%d). ignored\n", err);
+}
+
+/* ---------------------------------------------------------------------- */
@ -3657,7 +3657,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DCSUB_H__ */
--- a/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/debug.c 2012-01-10 02:15:56.545455955 +0000
+++ b/fs/aufs/debug.c 2012-10-10 06:26:21.205348749 +0100
@@ -0,0 +1,489 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -4139,7 +4139,7 @@
+ AuDebugOn(destr.len < NAME_MAX);
+
+#ifdef CONFIG_4KSTACKS
+ pr_warning("CONFIG_4KSTACKS is defined.\n");
+ pr_warn("CONFIG_4KSTACKS is defined.\n");
+#endif
+
+#ifdef AuForceNoBrs
@ -4149,7 +4149,7 @@
+ return 0;
+}
--- a/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/debug.h 2012-01-10 02:15:56.545455955 +0000
+++ b/fs/aufs/debug.h 2012-10-10 06:26:21.225348843 +0100
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -4217,7 +4217,7 @@
+#define AuWarn1(fmt, ...) do { \
+ static unsigned char _c; \
+ if (!_c++) \
+ pr_warning(fmt, ##__VA_ARGS__); \
+ pr_warn(fmt, ##__VA_ARGS__); \
+} while (0)
+
+#define AuErr1(fmt, ...) do { \
@ -4395,7 +4395,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DEBUG_H__ */
--- a/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/dentry.c 2012-01-10 02:15:56.545455955 +0000
+++ b/fs/aufs/dentry.c 2012-10-10 06:26:21.225348843 +0100
@@ -0,0 +1,1140 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -5538,7 +5538,7 @@
+ .d_release = aufs_d_release
+};
--- a/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/dentry.h 2012-01-10 02:15:56.549455982 +0000
+++ b/fs/aufs/dentry.h 2012-10-10 06:26:21.225348843 +0100
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -6324,7 +6324,7 @@
+ return -1;
+}
--- a/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/dir.c 2012-03-20 03:45:28.417045299 +0000
+++ b/fs/aufs/dir.c 2012-10-10 06:26:21.225348843 +0100
@@ -0,0 +1,634 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -7101,7 +7101,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DIR_H__ */
--- a/fs/aufs/dynop.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/dynop.c 2012-01-10 02:15:56.549455982 +0000
+++ b/fs/aufs/dynop.c 2012-10-10 06:26:21.225348843 +0100
@@ -0,0 +1,377 @@
+/*
+ * Copyright (C) 2010-2012 Junjiro R. Okajima
@ -7560,7 +7560,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_DYNOP_H__ */
--- a/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/export.c 2012-03-20 03:45:28.417045299 +0000
+++ b/fs/aufs/export.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,804 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -8367,7 +8367,7 @@
+ atomic_set(&sbinfo->si_xigen_next, u);
+}
--- a/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/f_op.c 2012-01-10 02:15:56.549455982 +0000
+++ b/fs/aufs/f_op.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,729 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -9099,7 +9099,7 @@
+#endif
+};
--- a/fs/aufs/f_op_sp.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/f_op_sp.c 2012-01-10 02:15:56.549455982 +0000
+++ b/fs/aufs/f_op_sp.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,298 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -9400,7 +9400,7 @@
+ return ret;
+}
--- a/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/file.c 2012-03-20 03:45:28.417045299 +0000
+++ b/fs/aufs/file.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,673 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -10076,7 +10076,7 @@
+#endif /* CONFIG_AUFS_DEBUG */
+};
--- a/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/file.h 2012-01-10 02:15:56.549455982 +0000
+++ b/fs/aufs/file.h 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,298 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -10307,7 +10307,7 @@
+{
+ if (atomic_inc_return(&au_fi(f)->fi_mmapped))
+ return;
+ pr_warning("fi_mmapped wrapped around\n");
+ pr_warn("fi_mmapped wrapped around\n");
+ while (!atomic_inc_return(&au_fi(f)->fi_mmapped))
+ ;
+}
@ -10536,7 +10536,7 @@
+ return err;
+}
--- a/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/fstype.h 2012-01-10 02:15:56.553455997 +0000
+++ b/fs/aufs/fstype.h 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,496 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -11035,7 +11035,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_FSTYPE_H__ */
--- a/fs/aufs/hfsnotify.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/hfsnotify.c 2012-03-11 05:01:22.570973560 +0000
+++ b/fs/aufs/hfsnotify.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -11358,7 +11358,7 @@
+ }
+}
--- a/fs/aufs/hnotify.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/hnotify.c 2012-03-11 05:01:22.570973560 +0000
+++ b/fs/aufs/hnotify.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,712 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -11470,7 +11470,7 @@
+
+ err = 0;
+ if (unlikely(inode->i_ino == AUFS_ROOT_INO)) {
+ pr_warning("branch root dir was changed\n");
+ pr_warn("branch root dir was changed\n");
+ goto out;
+ }
+
@ -11565,7 +11565,7 @@
+
+ err = 1;
+ if (unlikely(inode->i_ino == AUFS_ROOT_INO)) {
+ pr_warning("branch root dir was changed\n");
+ pr_warn("branch root dir was changed\n");
+ err = 0;
+ goto out;
+ }
@ -11621,7 +11621,7 @@
+ if (IS_ROOT(dentry)
+ /* || (inode && inode->i_ino == AUFS_ROOT_INO) */
+ ) {
+ pr_warning("branch root dir was changed\n");
+ pr_warn("branch root dir was changed\n");
+ return 0;
+ }
+
@ -11720,8 +11720,8 @@
+ if (au_ftest_hnjob(a->flags, MNTPNT)
+ && a->dentry
+ && d_mountpoint(a->dentry))
+ pr_warning("mount-point %.*s is removed or renamed\n",
+ AuDLNPair(a->dentry));
+ pr_warn("mount-point %.*s is removed or renamed\n",
+ AuDLNPair(a->dentry));
+
+ return 0;
+}
@ -11783,7 +11783,7 @@
+ goto out;
+
+ if (unlikely(inode->i_ino == AUFS_ROOT_INO)) {
+ pr_warning("wrong root branch\n");
+ pr_warn("wrong root branch\n");
+ iput(inode);
+ inode = NULL;
+ goto out;
@ -12073,8 +12073,8 @@
+ au_hn_destroy_cache();
+}
--- a/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/i_op.c 2012-03-20 03:45:28.417045299 +0000
@@ -0,0 +1,992 @@
+++ b/fs/aufs/i_op.c 2012-10-10 06:26:21.241348914 +0100
@@ -0,0 +1,987 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -12282,18 +12282,13 @@
+ ret = d_splice_alias(inode, dentry);
+ if (unlikely(IS_ERR(ret) && inode)) {
+ ii_write_unlock(inode);
+ lc_idx = AuLcNonDir_IIINFO;
+ if (S_ISLNK(inode->i_mode))
+ lc_idx = AuLcSymlink_IIINFO;
+ else if (S_ISDIR(inode->i_mode))
+ lc_idx = AuLcDir_IIINFO;
+ au_rw_class(&au_ii(inode)->ii_rwsem, au_lc_key + lc_idx);
+ iput(inode);
+ inode = NULL;
+ }
+
+out_unlock:
+ di_write_unlock(dentry);
+ if (unlikely(IS_ERR(ret) && inode)) {
+ if (inode) {
+ lc_idx = AuLcNonDir_DIINFO;
+ if (S_ISLNK(inode->i_mode))
+ lc_idx = AuLcSymlink_DIINFO;
@ -13068,7 +13063,7 @@
+ .truncate_range = aufs_truncate_range
+};
--- a/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/i_op_add.c 2012-03-20 03:45:28.425045336 +0000
+++ b/fs/aufs/i_op_add.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,711 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -13782,7 +13777,7 @@
+ return err;
+}
--- a/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/i_op_del.c 2012-01-10 02:15:56.557456016 +0000
+++ b/fs/aufs/i_op_del.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -14263,7 +14258,7 @@
+ return err;
+}
--- a/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/i_op_ren.c 2012-03-11 05:01:22.570973560 +0000
+++ b/fs/aufs/i_op_ren.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,1026 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -14521,8 +14516,8 @@
+ || au_test_fs_remote(a->h_dst->d_sb)) {
+ err = au_whtmp_rmdir(dir, a->btgt, a->h_dst, &a->whlist);
+ if (unlikely(err))
+ pr_warning("failed removing whtmp dir %.*s (%d), "
+ "ignored.\n", AuDLNPair(a->h_dst), err);
+ pr_warn("failed removing whtmp dir %.*s (%d), "
+ "ignored.\n", AuDLNPair(a->h_dst), err);
+ } else {
+ au_nhash_wh_free(&a->thargs->whlist);
+ a->thargs->whlist = a->whlist;
@ -15559,8 +15554,8 @@
+ AuRwDestroy(&iinfo->ii_rwsem);
+}
--- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/inode.c 2012-01-10 02:15:56.557456016 +0000
@@ -0,0 +1,471 @@
+++ b/fs/aufs/inode.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -15889,7 +15884,7 @@
+ struct super_block *sb;
+ struct mutex *mtx;
+ ino_t h_ino, ino;
+ int err;
+ int err, lc_idx;
+ aufs_bindex_t bstart;
+
+ sb = dentry->d_sb;
@ -15930,6 +15925,13 @@
+
+ AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW));
+ if (inode->i_state & I_NEW) {
+ lc_idx = AuLcNonDir_IIINFO;
+ if (S_ISLNK(h_inode->i_mode))
+ lc_idx = AuLcSymlink_IIINFO;
+ else if (S_ISDIR(h_inode->i_mode))
+ lc_idx = AuLcDir_IIINFO;
+ au_rw_class(&au_ii(inode)->ii_rwsem, au_lc_key + lc_idx);
+
+ ii_write_lock_new_child(inode);
+ err = set_inode(inode, dentry);
+ if (!err) {
@ -16033,7 +16035,7 @@
+ return au_test_h_perm(h_inode, mask);
+}
--- a/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/inode.h 2012-03-20 03:45:28.425045336 +0000
+++ b/fs/aufs/inode.h 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,559 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -16794,7 +16796,7 @@
+#endif
+#endif
--- a/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/loop.c 2012-01-10 02:15:56.557456016 +0000
+++ b/fs/aufs/loop.c 2012-07-22 01:31:00.162115458 +0100
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -16905,8 +16907,8 @@
+
+pr:
+ spin_unlock(&spin);
+ pr_warning("you may want to try another patch for loopback file "
+ "on %s(0x%lx) branch\n", au_sbtype(h_sb), magic);
+ pr_warn("you may want to try another patch for loopback file "
+ "on %s(0x%lx) branch\n", au_sbtype(h_sb), magic);
+}
+
+int au_loopback_init(void)
@ -17347,7 +17349,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_MODULE_H__ */
--- a/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/opts.c 2012-01-10 02:15:56.561456041 +0000
+++ b/fs/aufs/opts.c 2012-07-22 01:31:00.166115467 +0100
@@ -0,0 +1,1677 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -17565,7 +17567,7 @@
+ else {
+ if (p)
+ *p = '+';
+ pr_warning("ignored branch attribute %s\n", str);
+ pr_warn("ignored branch attribute %s\n", str);
+ break;
+ }
+ if (p)
@ -17588,7 +17590,7 @@
+ if (!val) {
+ if (p)
+ *p = '+';
+ pr_warning("ignored branch permission %s\n", perm);
+ pr_warn("ignored branch permission %s\n", perm);
+ val = AuBrPerm_RO;
+ goto out;
+ }
@ -18474,7 +18476,7 @@
+ break;
+
+ case Opt_ignore:
+ pr_warning("ignored %s\n", opt_str);
+ pr_warn("ignored %s\n", opt_str);
+ /*FALLTHROUGH*/
+ case Opt_ignore_silent:
+ skipped = 1;
@ -18810,14 +18812,14 @@
+
+ if (!(sb_flags & MS_RDONLY)) {
+ if (unlikely(!au_br_writable(au_sbr_perm(sb, 0))))
+ pr_warning("first branch should be rw\n");
+ pr_warn("first branch should be rw\n");
+ if (unlikely(au_opt_test(sbinfo->si_mntflags, SHWH)))
+ pr_warning("shwh should be used with ro\n");
+ pr_warn("shwh should be used with ro\n");
+ }
+
+ if (au_opt_test((sbinfo->si_mntflags | pending), UDBA_HNOTIFY)
+ && !au_opt_test(sbinfo->si_mntflags, XINO))
+ pr_warning("udba=*notify requires xino\n");
+ pr_warn("udba=*notify requires xino\n");
+
+ err = 0;
+ root = sb->s_root;
@ -19239,7 +19241,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_OPTS_H__ */
--- a/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/plink.c 2012-01-10 02:15:56.561456041 +0000
+++ b/fs/aufs/plink.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,515 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -19667,7 +19669,7 @@
+
+out:
+ if (unlikely(err)) {
+ pr_warning("err %d, damaged pseudo link.\n", err);
+ pr_warn("err %d, damaged pseudo link.\n", err);
+ if (tmp) {
+ au_spl_del_rcu(&tmp->list, &sbinfo->si_plink);
+ call_rcu(&tmp->rcu, do_put_plink_rcu);
@ -19989,7 +19991,7 @@
+ return err;
+}
--- a/fs/aufs/rdu.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/rdu.c 2012-01-10 02:15:56.561456041 +0000
+++ b/fs/aufs/rdu.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -20977,8 +20979,8 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_SPL_H__ */
--- a/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/super.c 2012-03-20 03:45:28.425045336 +0000
@@ -0,0 +1,938 @@
+++ b/fs/aufs/super.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,968 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -21286,7 +21288,18 @@
+
+ old = a;
+ a += b;
+ if (old < a)
+ if (old <= a)
+ return a;
+ return ULLONG_MAX;
+}
+
+static u64 au_mul_till_max(u64 a, long mul)
+{
+ u64 old;
+
+ old = a;
+ a *= mul;
+ if (old <= a)
+ return a;
+ return ULLONG_MAX;
+}
@ -21294,25 +21307,26 @@
+static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf)
+{
+ int err;
+ long bsize, factor;
+ u64 blocks, bfree, bavail, files, ffree;
+ aufs_bindex_t bend, bindex, i;
+ unsigned char shared;
+ struct path h_path;
+ struct super_block *h_sb;
+
+ err = 0;
+ bsize = LONG_MAX;
+ files = 0;
+ ffree = 0;
+ blocks = 0;
+ bfree = 0;
+ bavail = 0;
+ files = 0;
+ ffree = 0;
+
+ err = 0;
+ bend = au_sbend(sb);
+ for (bindex = bend; bindex >= 0; bindex--) {
+ for (bindex = 0; bindex <= bend; bindex++) {
+ h_path.mnt = au_sbr_mnt(sb, bindex);
+ h_sb = h_path.mnt->mnt_sb;
+ shared = 0;
+ for (i = bindex + 1; !shared && i <= bend; i++)
+ for (i = 0; !shared && i < bindex; i++)
+ shared = (au_sbr_sb(sb, i) == h_sb);
+ if (shared)
+ continue;
@ -21323,18 +21337,36 @@
+ if (unlikely(err))
+ goto out;
+
+ blocks = au_add_till_max(blocks, buf->f_blocks);
+ bfree = au_add_till_max(bfree, buf->f_bfree);
+ bavail = au_add_till_max(bavail, buf->f_bavail);
+ if (bsize > buf->f_bsize) {
+ /*
+ * we will reduce bsize, so we have to expand blocks
+ * etc. to match them again
+ */
+ factor = (bsize / buf->f_bsize);
+ blocks = au_mul_till_max(blocks, factor);
+ bfree = au_mul_till_max(bfree, factor);
+ bavail = au_mul_till_max(bavail, factor);
+ bsize = buf->f_bsize;
+ }
+
+ factor = (buf->f_bsize / bsize);
+ blocks = au_add_till_max(blocks,
+ au_mul_till_max(buf->f_blocks, factor));
+ bfree = au_add_till_max(bfree,
+ au_mul_till_max(buf->f_bfree, factor));
+ bavail = au_add_till_max(bavail,
+ au_mul_till_max(buf->f_bavail, factor));
+ files = au_add_till_max(files, buf->f_files);
+ ffree = au_add_till_max(ffree, buf->f_ffree);
+ }
+
+ buf->f_bsize = bsize;
+ buf->f_blocks = blocks;
+ buf->f_bfree = bfree;
+ buf->f_bavail = bavail;
+ buf->f_files = files;
+ buf->f_ffree = ffree;
+ buf->f_frsize = 0;
+
+out:
+ return err;
@ -22682,7 +22714,7 @@
+#endif /* __KERNEL__ */
+#endif /* __SYSAUFS_H__ */
--- a/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/sysfs.c 2012-01-10 02:15:56.569456073 +0000
+++ b/fs/aufs/sysfs.c 2012-07-22 01:31:00.166115467 +0100
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -22937,12 +22969,12 @@
+ "%d", bindex);
+ err = sysfs_create_file(kobj, &br->br_attr);
+ if (unlikely(err))
+ pr_warning("failed %s under sysfs(%d)\n",
+ br->br_name, err);
+ pr_warn("failed %s under sysfs(%d)\n",
+ br->br_name, err);
+ }
+}
--- a/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/sysrq.c 2012-01-10 02:15:56.569456073 +0000
+++ b/fs/aufs/sysrq.c 2012-10-10 06:26:21.261349000 +0100
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -23981,7 +24013,7 @@
+ return 0;
+}
--- a/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/vfsub.c 2012-03-20 03:45:28.425045336 +0000
+++ b/fs/aufs/vfsub.c 2012-10-10 06:26:21.265349041 +0100
@@ -0,0 +1,835 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -24819,7 +24851,7 @@
+ return err;
+}
--- a/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/vfsub.h 2012-03-20 03:45:28.425045336 +0000
+++ b/fs/aufs/vfsub.h 2012-10-10 06:26:21.265349041 +0100
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -25757,7 +25789,7 @@
+ }
+};
--- a/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/whout.c 2012-01-10 02:15:56.573456100 +0000
+++ b/fs/aufs/whout.c 2012-10-10 06:26:21.265349041 +0100
@@ -0,0 +1,1049 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -25917,7 +25949,7 @@
+ goto out_name;
+ dput(dentry);
+ }
+ /* pr_warning("could not get random name\n"); */
+ /* pr_warn("could not get random name\n"); */
+ dentry = ERR_PTR(-EEXIST);
+ AuDbg("%.*s\n", AuLNPair(&qs));
+ BUG();
@ -26035,8 +26067,8 @@
+ mnt_drop_write(whpath->mnt);
+ }
+ if (unlikely(err))
+ pr_warning("failed removing %.*s (%d), ignored.\n",
+ AuDLNPair(whpath->dentry), err);
+ pr_warn("failed removing %.*s (%d), ignored.\n",
+ AuDLNPair(whpath->dentry), err);
+}
+
+static int test_linkable(struct dentry *h_root)
@ -26340,8 +26372,8 @@
+ mnt_drop_write(a->br->br_mnt);
+ }
+ } else {
+ pr_warning("%.*s is moved, ignored\n",
+ AuDLNPair(wbr->wbr_whbase));
+ pr_warn("%.*s is moved, ignored\n",
+ AuDLNPair(wbr->wbr_whbase));
+ err = 0;
+ }
+ dput(wbr->wbr_whbase);
@ -26732,8 +26764,8 @@
+ return 0; /* success */
+ }
+
+ pr_warning("failed removing %.*s(%d), ignored\n",
+ AuDLNPair(wh_dentry), err);
+ pr_warn("failed removing %.*s(%d), ignored\n",
+ AuDLNPair(wh_dentry), err);
+ return err;
+}
+
@ -26803,8 +26835,8 @@
+ args->wh_dentry = dget(wh_dentry);
+ wkq_err = au_wkq_nowait(call_rmdir_whtmp, args, sb, /*flags*/0);
+ if (unlikely(wkq_err)) {
+ pr_warning("rmdir error %.*s (%d), ignored\n",
+ AuDLNPair(wh_dentry), wkq_err);
+ pr_warn("rmdir error %.*s (%d), ignored\n",
+ AuDLNPair(wh_dentry), wkq_err);
+ au_whtmp_rmdir_free(args);
+ }
+}
@ -26900,7 +26932,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_WHOUT_H__ */
--- a/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/wkq.c 2012-01-10 02:15:56.573456100 +0000
+++ b/fs/aufs/wkq.c 2012-10-10 06:26:21.265349041 +0100
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -27212,7 +27244,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_WKQ_H__ */
--- a/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/xino.c 2012-01-10 02:15:56.573456100 +0000
+++ b/fs/aufs/xino.c 2012-07-22 01:31:00.166115467 +0100
@@ -0,0 +1,1264 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -27532,7 +27564,7 @@
+
+ ii_read_unlock(dir);
+ if (unlikely(err))
+ pr_warning("err b%d, (%d)\n", bindex, err);
+ pr_warn("err b%d, (%d)\n", bindex, err);
+ atomic_dec(&br->br_xino_running);
+ atomic_dec(&br->br_count);
+ si_write_unlock(sb);
@ -28479,7 +28511,7 @@
+ return err;
+}
--- a/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100
+++ b/include/linux/aufs_type.h 2012-03-20 03:45:28.425045336 +0000
+++ b/include/linux/aufs_type.h 2012-10-10 06:26:21.265349041 +0100
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -28522,7 +28554,7 @@
+
+#include <linux/limits.h>
+
+#define AUFS_VERSION "3.2-20120312"
+#define AUFS_VERSION "3.2-20120827"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')