Commit f8f04248 authored by Andreas Gruenbacher's avatar Andreas Gruenbacher
Browse files

gfs2: glock cancelation flag fix



When an asynchronous glock holder is dequeued that hasn't been granted
yet (HIF_HOLDER not set) and no dlm operation is in progress on behalf
of that holder (GLF_LOCK not set), the dequeuing takes place in
__gfs2_glock_dq().  There, we are not clearing the HIF_WAIT flag and
waking up waiters.  Fix that.

This bug prevents the same holder from being enqueued later (gfs2_glock_nq())
without first reinitializing it (gfs2_holder_reinit()).  The code
doesn't currently use this pattern, but this will change in the next
commit.

Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent b5434592
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1545,6 +1545,8 @@ static void __gfs2_glock_dq(struct gfs2_holder *gh)
	list_del_init(&gh->gh_list);
	clear_bit(HIF_HOLDER, &gh->gh_iflags);
	trace_gfs2_glock_queue(gh, 0);
	if (test_bit(HIF_WAIT, &gh->gh_iflags))
		gfs2_holder_wake(gh);

	/*
	 * If there hasn't been a demote request we are done.