diff options
Diffstat (limited to 'fs/gfs2/sys.c')
-rw-r--r-- | fs/gfs2/sys.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c index a78997ea5037..4d284d14980b 100644 --- a/fs/gfs2/sys.c +++ b/fs/gfs2/sys.c | |||
@@ -36,6 +36,30 @@ static ssize_t fsname_show(struct gfs2_sbd *sdp, char *buf) | |||
36 | return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname); | 36 | return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname); |
37 | } | 37 | } |
38 | 38 | ||
39 | static int gfs2_uuid_valid(const u8 *uuid) | ||
40 | { | ||
41 | int i; | ||
42 | |||
43 | for (i = 0; i < 16; i++) { | ||
44 | if (uuid[i]) | ||
45 | return 1; | ||
46 | } | ||
47 | return 0; | ||
48 | } | ||
49 | |||
50 | static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf) | ||
51 | { | ||
52 | const u8 *uuid = sdp->sd_sb.sb_uuid; | ||
53 | buf[0] = '\0'; | ||
54 | if (!gfs2_uuid_valid(uuid)) | ||
55 | return 0; | ||
56 | return snprintf(buf, PAGE_SIZE, "%02X%02X%02X%02X-%02X%02X-" | ||
57 | "%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X\n", | ||
58 | uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], | ||
59 | uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], uuid[11], | ||
60 | uuid[12], uuid[13], uuid[14], uuid[15]); | ||
61 | } | ||
62 | |||
39 | static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf) | 63 | static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf) |
40 | { | 64 | { |
41 | unsigned int count; | 65 | unsigned int count; |
@@ -158,6 +182,7 @@ static struct gfs2_attr gfs2_attr_##name = __ATTR(name, mode, show, store) | |||
158 | 182 | ||
159 | GFS2_ATTR(id, 0444, id_show, NULL); | 183 | GFS2_ATTR(id, 0444, id_show, NULL); |
160 | GFS2_ATTR(fsname, 0444, fsname_show, NULL); | 184 | GFS2_ATTR(fsname, 0444, fsname_show, NULL); |
185 | GFS2_ATTR(uuid, 0444, uuid_show, NULL); | ||
161 | GFS2_ATTR(freeze, 0644, freeze_show, freeze_store); | 186 | GFS2_ATTR(freeze, 0644, freeze_show, freeze_store); |
162 | GFS2_ATTR(withdraw, 0644, withdraw_show, withdraw_store); | 187 | GFS2_ATTR(withdraw, 0644, withdraw_show, withdraw_store); |
163 | GFS2_ATTR(statfs_sync, 0200, NULL, statfs_sync_store); | 188 | GFS2_ATTR(statfs_sync, 0200, NULL, statfs_sync_store); |
@@ -168,6 +193,7 @@ GFS2_ATTR(quota_refresh_group, 0200, NULL, quota_refresh_group_store); | |||
168 | static struct attribute *gfs2_attrs[] = { | 193 | static struct attribute *gfs2_attrs[] = { |
169 | &gfs2_attr_id.attr, | 194 | &gfs2_attr_id.attr, |
170 | &gfs2_attr_fsname.attr, | 195 | &gfs2_attr_fsname.attr, |
196 | &gfs2_attr_uuid.attr, | ||
171 | &gfs2_attr_freeze.attr, | 197 | &gfs2_attr_freeze.attr, |
172 | &gfs2_attr_withdraw.attr, | 198 | &gfs2_attr_withdraw.attr, |
173 | &gfs2_attr_statfs_sync.attr, | 199 | &gfs2_attr_statfs_sync.attr, |
@@ -598,12 +624,23 @@ void gfs2_sys_fs_del(struct gfs2_sbd *sdp) | |||
598 | kobject_put(&sdp->sd_kobj); | 624 | kobject_put(&sdp->sd_kobj); |
599 | } | 625 | } |
600 | 626 | ||
627 | |||
601 | static int gfs2_uevent(struct kset *kset, struct kobject *kobj, | 628 | static int gfs2_uevent(struct kset *kset, struct kobject *kobj, |
602 | struct kobj_uevent_env *env) | 629 | struct kobj_uevent_env *env) |
603 | { | 630 | { |
604 | struct gfs2_sbd *sdp = container_of(kobj, struct gfs2_sbd, sd_kobj); | 631 | struct gfs2_sbd *sdp = container_of(kobj, struct gfs2_sbd, sd_kobj); |
632 | const u8 *uuid = sdp->sd_sb.sb_uuid; | ||
633 | |||
605 | add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name); | 634 | add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name); |
606 | add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name); | 635 | add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name); |
636 | if (gfs2_uuid_valid(uuid)) { | ||
637 | add_uevent_var(env, "UUID=%02X%02X%02X%02X-%02X%02X-%02X%02X-" | ||
638 | "%02X%02X-%02X%02X%02X%02X%02X%02X", | ||
639 | uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], | ||
640 | uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], | ||
641 | uuid[10], uuid[11], uuid[12], uuid[13], | ||
642 | uuid[14], uuid[15]); | ||
643 | } | ||
607 | return 0; | 644 | return 0; |
608 | } | 645 | } |
609 | 646 | ||