cluster: STABLE3 - gfs: Update uevents to match gfs2

Steven Whitehouse swhiteho at fedoraproject.org
Mon Oct 5 15:32:15 UTC 2009


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=156544eef7f19e934a0dbb2d6271c831151c82ff
Commit:        156544eef7f19e934a0dbb2d6271c831151c82ff
Parent:        1d4e80d85ac546bb2e33c531d68164bb2a41b953
Author:        Steven Whitehouse <swhiteho at redhat.com>
AuthorDate:    Mon Oct 5 17:28:30 2009 +0100
Committer:     Steven Whitehouse <swhiteho at redhat.com>
CommitterDate: Mon Oct 5 17:28:30 2009 +0100

gfs: Update uevents to match gfs2

bz: #527251

This updates gfs so that it produces the same info as gfs2 where
that makes sense.

Signed-off-by: Steven Whitehouse <swhiteho at redhat.com>
---
 gfs-kernel/src/gfs/ops_fstype.c |   12 ++++++++++++
 gfs-kernel/src/gfs/ops_super.c  |    2 ++
 gfs-kernel/src/gfs/super.h      |    1 +
 gfs-kernel/src/gfs/sys.c        |   23 ++++++++++++++++++++---
 4 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/gfs-kernel/src/gfs/ops_fstype.c b/gfs-kernel/src/gfs/ops_fstype.c
index d72b74a..2e74d04 100644
--- a/gfs-kernel/src/gfs/ops_fstype.c
+++ b/gfs-kernel/src/gfs/ops_fstype.c
@@ -585,6 +585,17 @@ fail:
 	return error;
 }
 
+void gfs_online_uevent(struct gfs_sbd *sdp)
+{
+	struct super_block *sb = sdp->sd_vfs;
+	char ro[20];
+	char spectator[20];
+	char *envp[] = { ro, spectator, NULL };
+	sprintf(ro, "RDONLY=%d", (sb->s_flags & MS_RDONLY) ? 1 : 0);
+	sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0);
+	kobject_uevent_env(&sdp->sd_kobj, KOBJ_ONLINE, envp);
+}
+
 /**
  * fill_super - Read in superblock
  * @sb: The VFS superblock
@@ -715,6 +726,7 @@ static int fill_super(struct super_block *sb, void *data, int silent)
 
 	gfs_proc_fs_add(sdp);
 	gfs_glock_dq_uninit(&mount_gh);
+	gfs_online_uevent(sdp);
 
 	return 0;
 
diff --git a/gfs-kernel/src/gfs/ops_super.c b/gfs-kernel/src/gfs/ops_super.c
index 51134d2..0a27b14 100644
--- a/gfs-kernel/src/gfs/ops_super.c
+++ b/gfs-kernel/src/gfs/ops_super.c
@@ -356,6 +356,8 @@ gfs_remount_fs(struct super_block *sb, int *flags, char *data)
 	/*  Don't let the VFS update atimes.  GFS handles this itself. */
 	*flags |= MS_NOATIME | MS_NODIRATIME;
 
+	if (error == 0)
+		gfs_online_uevent(sdp);
 out:
 	kfree(args);
 	return error;
diff --git a/gfs-kernel/src/gfs/super.h b/gfs-kernel/src/gfs/super.h
index 4156f33..2ffbb9f 100644
--- a/gfs-kernel/src/gfs/super.h
+++ b/gfs-kernel/src/gfs/super.h
@@ -49,5 +49,6 @@ int gfs_lock_fs_check_clean(struct gfs_sbd *sdp, unsigned int state,
 			    struct gfs_holder *t_gh);
 int gfs_freeze_fs(struct gfs_sbd *sdp);
 void gfs_unfreeze_fs(struct gfs_sbd *sdp);
+void gfs_online_uevent(struct gfs_sbd *sdp);
 
 #endif /* __SUPER_DOT_H__ */
diff --git a/gfs-kernel/src/gfs/sys.c b/gfs-kernel/src/gfs/sys.c
index d0d4b07..f20d302 100644
--- a/gfs-kernel/src/gfs/sys.c
+++ b/gfs-kernel/src/gfs/sys.c
@@ -8,6 +8,7 @@
 #include <linux/proc_fs.h>
 #include <linux/module.h>
 #include <asm/uaccess.h>
+#include <linux/genhd.h>
 
 #include "gfs.h"
 #include "glock.h"
@@ -76,20 +77,34 @@ static struct kset *gfs_kset;
 
 int gfs_sys_fs_add(struct gfs_sbd *sdp)
 {
+	struct super_block *sb = sdp->sd_vfs;
 	int error;
+	char ro[20];
+	char spectator[20];
+	char *envp[] = { ro, spectator, NULL };
 
-	sdp->sd_kobj.kset = gfs_kset;
+	sprintf(ro, "RDONLY=%d", (sb->s_flags & MS_RDONLY) ? 1 : 0);
+	sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0);
 
+	sdp->sd_kobj.kset = gfs_kset;
 	error = kobject_init_and_add(&sdp->sd_kobj, &gfs_ktype, NULL,
 				     "%s", sdp->sd_table_name);
 	if (error)
 		goto fail;
 
-	kobject_uevent(&sdp->sd_kobj, KOBJ_ADD);
+	error = sysfs_create_link(&sdp->sd_kobj,
+				  &disk_to_dev(sb->s_bdev->bd_disk)->kobj,
+				  "device");
+	if (error)
+		goto fail_put;
+
+	kobject_uevent_env(&sdp->sd_kobj, KOBJ_ADD, envp);
 
 	return 0;
 
- fail:
+fail_put:
+	kobject_put(&sdp->sd_kobj);
+fail:
 	return error;
 }
 
@@ -104,6 +119,8 @@ static int gfs_uevent(struct kset *kset, struct kobject *kobj,
 	struct gfs_sbd *sdp = container_of(kobj, struct gfs_sbd, sd_kobj);
 	add_uevent_var(env, "LOCKTABLE=%s", sdp->sd_table_name);
 	add_uevent_var(env, "LOCKPROTO=%s", sdp->sd_proto_name);
+	if (!sdp->sd_args.ar_spectator)
+		add_uevent_var(env, "JOURNALID=%u", sdp->sd_lockstruct.ls_jid);
 	return 0;
 }
 


More information about the cluster-commits mailing list