Commit f084a4f4 authored by Ross Lagerwall's avatar Ross Lagerwall Committed by David Teigland
Browse files

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: default avatarRoss Lagerwall <ross.lagerwall@citrix.com>
Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 90db4f8b
Loading
Loading
Loading
Loading
+4 −14
Original line number Diff line number Diff line
@@ -197,8 +197,6 @@ static struct kset *dlm_kset;

static int do_uevent(struct dlm_ls *ls, int in)
{
	int error;

	if (in)
		kobject_uevent(&ls->ls_kobj, KOBJ_ONLINE);
	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
	   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));

	log_rinfo(ls, "group event done %d %d", error, ls->ls_uevent_result);

	if (error)
		goto out;
	log_rinfo(ls, "group event done %d", ls->ls_uevent_result);

	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;
	return ls->ls_uevent_result;
}

static int dlm_uevent(struct kset *kset, struct kobject *kobj,