diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2011-05-10 10:01:59 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2011-05-10 10:01:59 -0400 |
commit | 32e471ef1057e812856739d26b4a87d929fb8aa1 (patch) | |
tree | f4f0debf9505b91d284c4e93d4c5f1b5c5690991 /fs/gfs2 | |
parent | 2ab9cd1c63b519e37b21b504376822be983badba (diff) |
GFS2: Use UUID field in generic superblock
The VFS superblock structure now has a UUID field, so we can use that
in preference to the UUID field in the GFS2 superblock now.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/incore.h | 1 | ||||
-rw-r--r-- | fs/gfs2/ops_fstype.c | 32 | ||||
-rw-r--r-- | fs/gfs2/sys.c | 6 |
3 files changed, 17 insertions, 22 deletions
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 69a63823f7c5..0a064e91ac70 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h | |||
@@ -488,7 +488,6 @@ struct gfs2_sb_host { | |||
488 | 488 | ||
489 | char sb_lockproto[GFS2_LOCKNAME_LEN]; | 489 | char sb_lockproto[GFS2_LOCKNAME_LEN]; |
490 | char sb_locktable[GFS2_LOCKNAME_LEN]; | 490 | char sb_locktable[GFS2_LOCKNAME_LEN]; |
491 | u8 sb_uuid[16]; | ||
492 | }; | 491 | }; |
493 | 492 | ||
494 | /* | 493 | /* |
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index d3c69eb91c74..8ac9ae189b53 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c | |||
@@ -126,8 +126,10 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) | |||
126 | * changed. | 126 | * changed. |
127 | */ | 127 | */ |
128 | 128 | ||
129 | static int gfs2_check_sb(struct gfs2_sbd *sdp, struct gfs2_sb_host *sb, int silent) | 129 | static int gfs2_check_sb(struct gfs2_sbd *sdp, int silent) |
130 | { | 130 | { |
131 | struct gfs2_sb_host *sb = &sdp->sd_sb; | ||
132 | |||
131 | if (sb->sb_magic != GFS2_MAGIC || | 133 | if (sb->sb_magic != GFS2_MAGIC || |
132 | sb->sb_type != GFS2_METATYPE_SB) { | 134 | sb->sb_type != GFS2_METATYPE_SB) { |
133 | if (!silent) | 135 | if (!silent) |
@@ -157,8 +159,10 @@ static void end_bio_io_page(struct bio *bio, int error) | |||
157 | unlock_page(page); | 159 | unlock_page(page); |
158 | } | 160 | } |
159 | 161 | ||
160 | static void gfs2_sb_in(struct gfs2_sb_host *sb, const void *buf) | 162 | static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf) |
161 | { | 163 | { |
164 | struct gfs2_sb_host *sb = &sdp->sd_sb; | ||
165 | struct super_block *s = sdp->sd_vfs; | ||
162 | const struct gfs2_sb *str = buf; | 166 | const struct gfs2_sb *str = buf; |
163 | 167 | ||
164 | sb->sb_magic = be32_to_cpu(str->sb_header.mh_magic); | 168 | sb->sb_magic = be32_to_cpu(str->sb_header.mh_magic); |
@@ -175,7 +179,7 @@ static void gfs2_sb_in(struct gfs2_sb_host *sb, const void *buf) | |||
175 | 179 | ||
176 | memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN); | 180 | memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN); |
177 | memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN); | 181 | memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN); |
178 | memcpy(sb->sb_uuid, str->sb_uuid, 16); | 182 | memcpy(s->s_uuid, str->sb_uuid, 16); |
179 | } | 183 | } |
180 | 184 | ||
181 | /** | 185 | /** |
@@ -197,7 +201,7 @@ static void gfs2_sb_in(struct gfs2_sb_host *sb, const void *buf) | |||
197 | * Returns: 0 on success or error | 201 | * Returns: 0 on success or error |
198 | */ | 202 | */ |
199 | 203 | ||
200 | static int gfs2_read_super(struct gfs2_sbd *sdp, sector_t sector) | 204 | static int gfs2_read_super(struct gfs2_sbd *sdp, sector_t sector, int silent) |
201 | { | 205 | { |
202 | struct super_block *sb = sdp->sd_vfs; | 206 | struct super_block *sb = sdp->sd_vfs; |
203 | struct gfs2_sb *p; | 207 | struct gfs2_sb *p; |
@@ -227,10 +231,10 @@ static int gfs2_read_super(struct gfs2_sbd *sdp, sector_t sector) | |||
227 | return -EIO; | 231 | return -EIO; |
228 | } | 232 | } |
229 | p = kmap(page); | 233 | p = kmap(page); |
230 | gfs2_sb_in(&sdp->sd_sb, p); | 234 | gfs2_sb_in(sdp, p); |
231 | kunmap(page); | 235 | kunmap(page); |
232 | __free_page(page); | 236 | __free_page(page); |
233 | return 0; | 237 | return gfs2_check_sb(sdp, silent); |
234 | } | 238 | } |
235 | 239 | ||
236 | /** | 240 | /** |
@@ -247,17 +251,13 @@ static int gfs2_read_sb(struct gfs2_sbd *sdp, int silent) | |||
247 | unsigned int x; | 251 | unsigned int x; |
248 | int error; | 252 | int error; |
249 | 253 | ||
250 | error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift); | 254 | error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift, silent); |
251 | if (error) { | 255 | if (error) { |
252 | if (!silent) | 256 | if (!silent) |
253 | fs_err(sdp, "can't read superblock\n"); | 257 | fs_err(sdp, "can't read superblock\n"); |
254 | return error; | 258 | return error; |
255 | } | 259 | } |
256 | 260 | ||
257 | error = gfs2_check_sb(sdp, &sdp->sd_sb, silent); | ||
258 | if (error) | ||
259 | return error; | ||
260 | |||
261 | sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift - | 261 | sdp->sd_fsb2bb_shift = sdp->sd_sb.sb_bsize_shift - |
262 | GFS2_BASIC_BLOCK_SHIFT; | 262 | GFS2_BASIC_BLOCK_SHIFT; |
263 | sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift; | 263 | sdp->sd_fsb2bb = 1 << sdp->sd_fsb2bb_shift; |
@@ -340,14 +340,10 @@ static int init_names(struct gfs2_sbd *sdp, int silent) | |||
340 | /* Try to autodetect */ | 340 | /* Try to autodetect */ |
341 | 341 | ||
342 | if (!proto[0] || !table[0]) { | 342 | if (!proto[0] || !table[0]) { |
343 | error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift); | 343 | error = gfs2_read_super(sdp, GFS2_SB_ADDR >> sdp->sd_fsb2bb_shift, silent); |
344 | if (error) | 344 | if (error) |
345 | return error; | 345 | return error; |
346 | 346 | ||
347 | error = gfs2_check_sb(sdp, &sdp->sd_sb, silent); | ||
348 | if (error) | ||
349 | goto out; | ||
350 | |||
351 | if (!proto[0]) | 347 | if (!proto[0]) |
352 | proto = sdp->sd_sb.sb_lockproto; | 348 | proto = sdp->sd_sb.sb_lockproto; |
353 | if (!table[0]) | 349 | if (!table[0]) |
@@ -364,7 +360,6 @@ static int init_names(struct gfs2_sbd *sdp, int silent) | |||
364 | while ((table = strchr(table, '/'))) | 360 | while ((table = strchr(table, '/'))) |
365 | *table = '_'; | 361 | *table = '_'; |
366 | 362 | ||
367 | out: | ||
368 | return error; | 363 | return error; |
369 | } | 364 | } |
370 | 365 | ||
@@ -1119,8 +1114,7 @@ static int fill_super(struct super_block *sb, struct gfs2_args *args, int silent | |||
1119 | if (sdp->sd_args.ar_statfs_quantum) { | 1114 | if (sdp->sd_args.ar_statfs_quantum) { |
1120 | sdp->sd_tune.gt_statfs_slow = 0; | 1115 | sdp->sd_tune.gt_statfs_slow = 0; |
1121 | sdp->sd_tune.gt_statfs_quantum = sdp->sd_args.ar_statfs_quantum; | 1116 | sdp->sd_tune.gt_statfs_quantum = sdp->sd_args.ar_statfs_quantum; |
1122 | } | 1117 | } else { |
1123 | else { | ||
1124 | sdp->sd_tune.gt_statfs_slow = 1; | 1118 | sdp->sd_tune.gt_statfs_slow = 1; |
1125 | sdp->sd_tune.gt_statfs_quantum = 30; | 1119 | sdp->sd_tune.gt_statfs_quantum = 30; |
1126 | } | 1120 | } |
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c index 748ccb557c18..e20eab37bc80 100644 --- a/fs/gfs2/sys.c +++ b/fs/gfs2/sys.c | |||
@@ -81,7 +81,8 @@ static int gfs2_uuid_valid(const u8 *uuid) | |||
81 | 81 | ||
82 | static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf) | 82 | static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf) |
83 | { | 83 | { |
84 | const u8 *uuid = sdp->sd_sb.sb_uuid; | 84 | struct super_block *s = sdp->sd_vfs; |
85 | const u8 *uuid = s->s_uuid; | ||
85 | buf[0] = '\0'; | 86 | buf[0] = '\0'; |
86 | if (!gfs2_uuid_valid(uuid)) | 87 | if (!gfs2_uuid_valid(uuid)) |
87 | return 0; | 88 | return 0; |
@@ -616,7 +617,8 @@ static int gfs2_uevent(struct kset *kset, struct kobject *kobj, | |||
616 | struct kobj_uevent_env *env) | 617 | struct kobj_uevent_env *env) |
617 | { | 618 | { |
618 | struct gfs2_sbd *sdp = container_of(kobj, struct gfs2_sbd, sd_kobj); | 619 | struct gfs2_sbd *sdp = container_of(kobj, struct gfs2_sbd, sd_kobj); |
619 | const u8 *uuid = sdp->sd_sb.sb_uuid; | 620 | struct super_block *s = sdp->sd_vfs; |
621 | const u8 *uuid = s->s_uuid; | ||
620 | 622 | ||
621 | add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name); | 623 | add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name); |
622 | add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name); | 624 | add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name); |