Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=156... Commit: 156544eef7f19e934a0dbb2d6271c831151c82ff Parent: 1d4e80d85ac546bb2e33c531d68164bb2a41b953 Author: Steven Whitehouse swhiteho@redhat.com AuthorDate: Mon Oct 5 17:28:30 2009 +0100 Committer: Steven Whitehouse swhiteho@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@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; }
cluster-commits@lists.fedorahosted.org