aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/sys.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/sys.c')
-rw-r--r--fs/gfs2/sys.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c
index a78997ea503..4d284d14980 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
39static 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
50static 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
39static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf) 63static 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
159GFS2_ATTR(id, 0444, id_show, NULL); 183GFS2_ATTR(id, 0444, id_show, NULL);
160GFS2_ATTR(fsname, 0444, fsname_show, NULL); 184GFS2_ATTR(fsname, 0444, fsname_show, NULL);
185GFS2_ATTR(uuid, 0444, uuid_show, NULL);
161GFS2_ATTR(freeze, 0644, freeze_show, freeze_store); 186GFS2_ATTR(freeze, 0644, freeze_show, freeze_store);
162GFS2_ATTR(withdraw, 0644, withdraw_show, withdraw_store); 187GFS2_ATTR(withdraw, 0644, withdraw_show, withdraw_store);
163GFS2_ATTR(statfs_sync, 0200, NULL, statfs_sync_store); 188GFS2_ATTR(statfs_sync, 0200, NULL, statfs_sync_store);
@@ -168,6 +193,7 @@ GFS2_ATTR(quota_refresh_group, 0200, NULL, quota_refresh_group_store);
168static struct attribute *gfs2_attrs[] = { 193static 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
601static int gfs2_uevent(struct kset *kset, struct kobject *kobj, 628static 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