aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/gfs2/incore.h1
-rw-r--r--fs/gfs2/ops_fstype.c1
-rw-r--r--fs/gfs2/sys.c37
3 files changed, 39 insertions, 0 deletions
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index 3f29bd224ba1..980a0864ca6c 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -470,6 +470,7 @@ struct gfs2_sb_host {
470 470
471 char sb_lockproto[GFS2_LOCKNAME_LEN]; 471 char sb_lockproto[GFS2_LOCKNAME_LEN];
472 char sb_locktable[GFS2_LOCKNAME_LEN]; 472 char sb_locktable[GFS2_LOCKNAME_LEN];
473 u8 sb_uuid[16];
473}; 474};
474 475
475/* 476/*
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index e502b379a4da..804ca7273a49 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -234,6 +234,7 @@ static void gfs2_sb_in(struct gfs2_sb_host *sb, const void *buf)
234 234
235 memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN); 235 memcpy(sb->sb_lockproto, str->sb_lockproto, GFS2_LOCKNAME_LEN);
236 memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN); 236 memcpy(sb->sb_locktable, str->sb_locktable, GFS2_LOCKNAME_LEN);
237 memcpy(sb->sb_uuid, str->sb_uuid, 16);
237} 238}
238 239
239/** 240/**
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
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