aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/sys.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2009-02-10 08:48:30 -0500
committerSteven Whitehouse <steve@dolmen.chygwyn.com>2009-03-24 07:21:21 -0400
commit02e3cc70ecbd4352ae4d26459929f43ab1547251 (patch)
tree56d0dd9501481545e592430e408e5cf1495ed373 /fs/gfs2/sys.c
parentf15ab5619d8068a321094f4705147764d689e88e (diff)
GFS2: Expose UUID via sysfs/uevent
Since we have a UUID, we ought to expose it to the user via sysfs and uevents. We already have the fs name in both of these places (a combination of the lock proto and lock table name) so if we add the UUID as well, we have a full set. For older filesystems (i.e. those created before mkfs.gfs2 was writing UUIDs by default) the sysfs file will appear zero length, and no UUID env var will be added to the uevents. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
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