From f0fc49f73ac375078ef4b2ba7e49de21670e3f6d Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Wed, 10 Oct 2012 05:43:52 +0000 Subject: [PATCH] [aufs] Update to aufs3.2-20120827 svn path=/dists/sid/linux/; revision=19431 --- debian/changelog | 2 + .../features/all/aufs3/aufs3-add.patch | 230 ++++++++++-------- 2 files changed, 133 insertions(+), 99 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0f566af8a..45c9b96d0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Sat, 29 Sep 2012 14:19:46 +0200 diff --git a/debian/patches/features/all/aufs3/aufs3-add.patch b/debian/patches/features/all/aufs3/aufs3-add.patch index e0c31c992..93dc0f02d 100644 --- a/debian/patches/features/all/aufs3/aufs3-add.patch +++ b/debian/patches/features/all/aufs3/aufs3-add.patch @@ -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 + -+#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')