Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c64e80d5 authored by Jeff Layton's avatar Jeff Layton Committed by J. Bruce Fields
Browse files

NLM: don't requeue block if it was invalidated while GRANT_MSG was in flight



It's possible for lockd to catch a SIGKILL while a GRANT_MSG callback
is in flight. If this happens we don't want lockd to insert the block
back into the nlm_blocked list.

This helps that situation, but there's still a possible race. Fixing
that will mean adding real locking for nlm_blocked.

Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent 9706501e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -795,6 +795,17 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)

	dprintk("lockd: GRANT_MSG RPC callback\n");

	/* if the block is not on a list at this point then it has
	 * been invalidated. Don't try to requeue it.
	 *
	 * FIXME: it's possible that the block is removed from the list
	 * after this check but before the nlmsvc_insert_block. In that
	 * case it will be added back. Perhaps we need better locking
	 * for nlm_blocked?
	 */
	if (list_empty(&block->b_list))
		return;

	/* Technically, we should down the file semaphore here. Since we
	 * move the block towards the head of the queue only, no harm
	 * can be done, though. */