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