dlm: Switch to using wait_event()
We saw an issue in a production server on a customer deployment where DLM 4.0.7 gets "stuck" and unable to join new lockspaces. There is no useful response for the dlm in do_event() if wait_event_interruptible() is interrupted, so switch to wait_event(). Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com> Signed-off-by: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
90db4f8be3
commit
f084a4f4a1
fs/dlm
|
@ -197,8 +197,6 @@ static struct kset *dlm_kset;
|
||||||
|
|
||||||
static int do_uevent(struct dlm_ls *ls, int in)
|
static int do_uevent(struct dlm_ls *ls, int in)
|
||||||
{
|
{
|
||||||
int error;
|
|
||||||
|
|
||||||
if (in)
|
if (in)
|
||||||
kobject_uevent(&ls->ls_kobj, KOBJ_ONLINE);
|
kobject_uevent(&ls->ls_kobj, KOBJ_ONLINE);
|
||||||
else
|
else
|
||||||
|
@ -209,20 +207,12 @@ static int do_uevent(struct dlm_ls *ls, int in)
|
||||||
/* dlm_controld will see the uevent, do the necessary group management
|
/* dlm_controld will see the uevent, do the necessary group management
|
||||||
and then write to sysfs to wake us */
|
and then write to sysfs to wake us */
|
||||||
|
|
||||||
error = wait_event_interruptible(ls->ls_uevent_wait,
|
wait_event(ls->ls_uevent_wait,
|
||||||
test_and_clear_bit(LSFL_UEVENT_WAIT, &ls->ls_flags));
|
test_and_clear_bit(LSFL_UEVENT_WAIT, &ls->ls_flags));
|
||||||
|
|
||||||
log_rinfo(ls, "group event done %d %d", error, ls->ls_uevent_result);
|
log_rinfo(ls, "group event done %d", ls->ls_uevent_result);
|
||||||
|
|
||||||
if (error)
|
return ls->ls_uevent_result;
|
||||||
goto out;
|
|
||||||
|
|
||||||
error = ls->ls_uevent_result;
|
|
||||||
out:
|
|
||||||
if (error)
|
|
||||||
log_error(ls, "group %s failed %d %d", in ? "join" : "leave",
|
|
||||||
error, ls->ls_uevent_result);
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dlm_uevent(struct kset *kset, struct kobject *kobj,
|
static int dlm_uevent(struct kset *kset, struct kobject *kobj,
|
||||||
|
|
Loading…
Reference in New Issue