diff options
-rw-r--r-- | fs/gfs2/ops_export.c | 11 | ||||
-rw-r--r-- | fs/gfs2/ops_export.h | 3 | ||||
-rw-r--r-- | fs/gfs2/ops_super.c | 6 |
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 | |||
13 | extern struct export_operations gfs2_export_ops; | 16 | extern struct export_operations gfs2_export_ops; |
14 | struct gfs2_fh_obj { | 17 | struct 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 | ||
150 | static void gfs2_write_super(struct super_block *sb) | 149 | static 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 | /** |