Skip to content

Instantly share code, notes, and snippets.

@sowawa
Created April 8, 2012 01:48
Show Gist options
  • Save sowawa/2333553 to your computer and use it in GitHub Desktop.
Save sowawa/2333553 to your computer and use it in GitHub Desktop.
git diff kernel 2.6.36 at 3cafe1c
diff --git a/fs/aufs/branch.c b/fs/aufs/branch.c
index 9cd242e..a72836f 100644
--- a/fs/aufs/branch.c
+++ b/fs/aufs/branch.c
@@ -321,11 +321,11 @@ static int au_wbr_init(struct au_branch *br, struct super_block *sb,
* a limit for rmdir/rename a dir
* cf. AUFS_MAX_NAMELEN in include/linux/aufs_type.h
*/
- h_dentry = path->dentry;
- err = vfs_statfs(h_dentry, &kst);
+ err = vfs_statfs(path, &kst);
if (unlikely(err))
goto out;
err = -EINVAL;
+ h_dentry = path->dentry;
if (kst.f_namelen >= NAME_MAX)
err = au_br_init_wh(sb, br, perm, h_dentry);
else
diff --git a/fs/aufs/super.c b/fs/aufs/super.c
index 5c1c823..31ad36e 100644
--- a/fs/aufs/super.c
+++ b/fs/aufs/super.c
@@ -294,7 +294,7 @@ static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf)
u64 blocks, bfree, bavail, files, ffree;
aufs_bindex_t bend, bindex, i;
unsigned char shared;
- struct vfsmount *h_mnt;
+ struct path h_path;
struct super_block *h_sb;
blocks = 0;
@@ -306,8 +306,8 @@ static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf)
err = 0;
bend = au_sbend(sb);
for (bindex = bend; bindex >= 0; bindex--) {
- h_mnt = au_sbr_mnt(sb, bindex);
- h_sb = h_mnt->mnt_sb;
+ 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++)
shared = (au_sbr_sb(sb, i) == h_sb);
@@ -315,7 +315,8 @@ static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf)
continue;
/* sb->s_root for NFS is unreliable */
- err = vfs_statfs(h_mnt->mnt_root, buf);
+ h_path.dentry = h_path.mnt->mnt_root;
+ err = vfs_statfs(&h_path, buf);
ir (unlikely(err))
goto out;
@@ -339,15 +340,18 @@ static int au_statfs_sum(struct super_block *sb, struct kstatfs *buf)
static int aufs_statfs(struct dentry *dentry, struct kstatfs *buf)
{
int err;
+ struct path h_path;
struct super_block *sb;
/* lock free root dinfo */
sb = dentry->d_sb;
si_noflush_read_lock(sb);
- if (!au_opt_test(au_mntflags(sb), SUM))
+ if (!au_opt_test(au_mntflags(sb), SUM)) {
/* sb->s_root for NFS is unreliable */
- err = vfs_statfs(au_sbr_mnt(sb, 0)->mnt_root, buf);
- else
+ h_path.mnt = au_sbr_mnt(sb, 0);
+ h_path.dentry = h_path.mnt->mnt_root;
+ err = vfs_statfs(&h_path, buf);
+ } else
err = au_statfs_sum(sb, buf);
si_read_unlock(sb);
diff --git a/fs/aufs/wbr_policy.c b/fs/aufs/wbr_policy.c
index 19a1ba0..f13eacf 100644
--- a/fs/aufs/wbr_policy.c
+++ b/fs/aufs/wbr_policy.c
@@ -407,6 +407,7 @@ static void au_mfs(struct dentry *dentry)
aufs_bindex_t bindex, bend;
int err;
unsigned long long b, bavail;
+ struct path h_path;
/* reduce the stack usage */
struct kstatfs *st;
@@ -429,7 +430,9 @@ static void au_mfs(struct dentry *dentry)
continue;
/* sb->s_root for NFS is unreliable */
- err = vfs_statfs(br->br_mnt->mnt_root, st);
+ h_path.mnt = br->br_mnt;
+ h_path.dentry = h_path.mnt->mnt_root;
+ err = vfs_statfs(&h_path, st);
if (unlikely(err)) {
AuWarn1("failed statfs, b%d, %d\n", bindex, err);
continue;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment