aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/gfs2/ops_export.c11
-rw-r--r--fs/gfs2/ops_export.h3
-rw-r--r--fs/gfs2/ops_super.c6
3 files changed, 11 insertions, 9 deletions
diff --git a/fs/gfs2/ops_export.c b/fs/gfs2/ops_export.c
index cf826893dd5f..4b8c6a9893e4 100644
--- a/fs/gfs2/ops_export.c
+++ b/fs/gfs2/ops_export.c
@@ -45,13 +45,13 @@ static struct dentry *gfs2_decode_fh(struct super_block *sb,
45 memset(&parent, 0, sizeof(struct gfs2_inum)); 45 memset(&parent, 0, sizeof(struct gfs2_inum));
46 46
47 switch (fh_type) { 47 switch (fh_type) {
48 case 10: 48 case GFS2_LARGE_FH_SIZE:
49 parent.no_formal_ino = ((u64)be32_to_cpu(fh[4])) << 32; 49 parent.no_formal_ino = ((u64)be32_to_cpu(fh[4])) << 32;
50 parent.no_formal_ino |= be32_to_cpu(fh[5]); 50 parent.no_formal_ino |= be32_to_cpu(fh[5]);
51 parent.no_addr = ((u64)be32_to_cpu(fh[6])) << 32; 51 parent.no_addr = ((u64)be32_to_cpu(fh[6])) << 32;
52 parent.no_addr |= be32_to_cpu(fh[7]); 52 parent.no_addr |= be32_to_cpu(fh[7]);
53 fh_obj.imode = be32_to_cpu(fh[8]); 53 fh_obj.imode = be32_to_cpu(fh[8]);
54 case 4: 54 case GFS2_SMALL_FH_SIZE:
55 this->no_formal_ino = ((u64)be32_to_cpu(fh[0])) << 32; 55 this->no_formal_ino = ((u64)be32_to_cpu(fh[0])) << 32;
56 this->no_formal_ino |= be32_to_cpu(fh[1]); 56 this->no_formal_ino |= be32_to_cpu(fh[1]);
57 this->no_addr = ((u64)be32_to_cpu(fh[2])) << 32; 57 this->no_addr = ((u64)be32_to_cpu(fh[2])) << 32;
@@ -72,7 +72,8 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len,
72 struct super_block *sb = inode->i_sb; 72 struct super_block *sb = inode->i_sb;
73 struct gfs2_inode *ip = GFS2_I(inode); 73 struct gfs2_inode *ip = GFS2_I(inode);
74 74
75 if (*len < 4 || (connectable && *len < 10)) 75 if (*len < GFS2_SMALL_FH_SIZE ||
76 (connectable && *len < GFS2_LARGE_FH_SIZE))
76 return 255; 77 return 255;
77 78
78 fh[0] = ip->i_num.no_formal_ino >> 32; 79 fh[0] = ip->i_num.no_formal_ino >> 32;
@@ -83,7 +84,7 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len,
83 fh[2] = cpu_to_be32(fh[2]); 84 fh[2] = cpu_to_be32(fh[2]);
84 fh[3] = ip->i_num.no_addr & 0xFFFFFFFF; 85 fh[3] = ip->i_num.no_addr & 0xFFFFFFFF;
85 fh[3] = cpu_to_be32(fh[3]); 86 fh[3] = cpu_to_be32(fh[3]);
86 *len = 4; 87 *len = GFS2_SMALL_FH_SIZE;
87 88
88 if (!connectable || inode == sb->s_root->d_inode) 89 if (!connectable || inode == sb->s_root->d_inode)
89 return *len; 90 return *len;
@@ -105,7 +106,7 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len,
105 106
106 fh[8] = cpu_to_be32(inode->i_mode); 107 fh[8] = cpu_to_be32(inode->i_mode);
107 fh[9] = 0; /* pad to double word */ 108 fh[9] = 0; /* pad to double word */
108 *len = 10; 109 *len = GFS2_LARGE_FH_SIZE;
109 110
110 iput(inode); 111 iput(inode);
111 112
diff --git a/fs/gfs2/ops_export.h b/fs/gfs2/ops_export.h
index d52c2d93010c..09aca5046fb1 100644
--- a/fs/gfs2/ops_export.h
+++ b/fs/gfs2/ops_export.h
@@ -10,6 +10,9 @@
10#ifndef __OPS_EXPORT_DOT_H__ 10#ifndef __OPS_EXPORT_DOT_H__
11#define __OPS_EXPORT_DOT_H__ 11#define __OPS_EXPORT_DOT_H__
12 12
13#define GFS2_SMALL_FH_SIZE 4
14#define GFS2_LARGE_FH_SIZE 10
15
13extern struct export_operations gfs2_export_ops; 16extern struct export_operations gfs2_export_ops;
14struct gfs2_fh_obj { 17struct gfs2_fh_obj {
15 struct gfs2_inum this; 18 struct gfs2_inum this;
diff --git a/fs/gfs2/ops_super.c b/fs/gfs2/ops_super.c
index 6ced71240379..820db9333bd5 100644
--- a/fs/gfs2/ops_super.c
+++ b/fs/gfs2/ops_super.c
@@ -79,7 +79,7 @@ static void gfs2_put_super(struct super_block *sb)
79 return; 79 return;
80 80
81 if (!strncmp(sb->s_type->name, "gfs2meta", 8)) 81 if (!strncmp(sb->s_type->name, "gfs2meta", 8))
82 return; /* meta fs. don't do nothin' */ 82 return; /* Nothing to do */
83 83
84 /* Unfreeze the filesystem, if we need to */ 84 /* Unfreeze the filesystem, if we need to */
85 85
@@ -136,7 +136,6 @@ static void gfs2_put_super(struct super_block *sb)
136 /* At this point, we're through participating in the lockspace */ 136 /* At this point, we're through participating in the lockspace */
137 gfs2_sys_fs_del(sdp); 137 gfs2_sys_fs_del(sdp);
138 vfree(sdp); 138 vfree(sdp);
139 sb->s_fs_info = NULL;
140} 139}
141 140
142/** 141/**
@@ -149,8 +148,7 @@ static void gfs2_put_super(struct super_block *sb)
149 148
150static void gfs2_write_super(struct super_block *sb) 149static void gfs2_write_super(struct super_block *sb)
151{ 150{
152 struct gfs2_sbd *sdp = sb->s_fs_info; 151 gfs2_log_flush(sb->s_fs_info, NULL);
153 gfs2_log_flush(sdp, NULL);
154} 152}
155 153
156/** 154/**