diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2008-11-27 04:42:51 -0500 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2009-01-05 02:39:15 -0500 |
commit | 9a776db7371b9c77a8f4f0d2ac6374d78ac7db7d (patch) | |
tree | 5863e73d8b84c35fe4223831c2c3f30ec23f6d9f | |
parent | 3af165ac4d099385b12e3e75a9ee3ffd02da33e0 (diff) |
GFS2: Send useful information with uevent messages
In order to distinguish between two differing uevent messages
and to avoid using the (racy) method of reading status from
sysfs in future, this adds some status information to our
uevent messages.
Btw, before anybody says "sysfs isn't racy", I'm aware of that,
but the way that GFS2 was using it (send an ambiugous uevent and
then expect the receiver to read sysfs to find out the status
of the reported operation) was.
The additional benefit of using the new interface is that it
should be possible for a node to recover multiple journals
at the same time, since there is no longer any confusion as
to which journal the status belongs to.
At some future stage, when all the userland programs have been
converted, I intend to remove the old interface.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
-rw-r--r-- | fs/gfs2/locking/dlm/mount.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/gfs2/locking/dlm/mount.c b/fs/gfs2/locking/dlm/mount.c index 0c4cbe6c8285..1aa7eb6a0226 100644 --- a/fs/gfs2/locking/dlm/mount.c +++ b/fs/gfs2/locking/dlm/mount.c | |||
@@ -194,17 +194,25 @@ out: | |||
194 | static void gdlm_recovery_done(void *lockspace, unsigned int jid, | 194 | static void gdlm_recovery_done(void *lockspace, unsigned int jid, |
195 | unsigned int message) | 195 | unsigned int message) |
196 | { | 196 | { |
197 | char env_jid[20]; | ||
198 | char env_status[20]; | ||
199 | char *envp[] = { env_jid, env_status, NULL }; | ||
197 | struct gdlm_ls *ls = lockspace; | 200 | struct gdlm_ls *ls = lockspace; |
198 | ls->recover_jid_done = jid; | 201 | ls->recover_jid_done = jid; |
199 | ls->recover_jid_status = message; | 202 | ls->recover_jid_status = message; |
200 | kobject_uevent(&ls->kobj, KOBJ_CHANGE); | 203 | sprintf(env_jid, "JID=%d", jid); |
204 | sprintf(env_status, "RECOVERY=%s", | ||
205 | message == LM_RD_SUCCESS ? "Done" : "Failed"); | ||
206 | kobject_uevent_env(&ls->kobj, KOBJ_CHANGE, envp); | ||
201 | } | 207 | } |
202 | 208 | ||
203 | static void gdlm_others_may_mount(void *lockspace) | 209 | static void gdlm_others_may_mount(void *lockspace) |
204 | { | 210 | { |
211 | char *message = "FIRSTMOUNT=Done"; | ||
212 | char *envp[] = { message, NULL }; | ||
205 | struct gdlm_ls *ls = lockspace; | 213 | struct gdlm_ls *ls = lockspace; |
206 | ls->first_done = 1; | 214 | ls->first_done = 1; |
207 | kobject_uevent(&ls->kobj, KOBJ_CHANGE); | 215 | kobject_uevent_env(&ls->kobj, KOBJ_CHANGE, envp); |
208 | } | 216 | } |
209 | 217 | ||
210 | /* Userspace gets the offline uevent, blocks new gfs locks on | 218 | /* Userspace gets the offline uevent, blocks new gfs locks on |