Created
April 8, 2012 01:48
-
-
Save sowawa/2333553 to your computer and use it in GitHub Desktop.
git diff kernel 2.6.36 at 3cafe1c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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