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

Commit 4f15e2b1 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

[PATCH] NLM: cleanup for blocked locks.

parent 80fec4c6
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ static int reclaimer(void *ptr);
 * This is the representation of a blocked client lock.
 */
struct nlm_wait {
	struct nlm_wait *	b_next;		/* linked list */
	struct list_head	b_list;		/* linked list */
	wait_queue_head_t	b_wait;		/* where to wait on */
	struct nlm_host *	b_host;
	struct file_lock *	b_lock;		/* local file lock */
@@ -39,7 +39,7 @@ struct nlm_wait {
	u32			b_status;	/* grant callback status */
};

static struct nlm_wait *	nlm_blocked;
static LIST_HEAD(nlm_blocked);

/*
 * Block on a lock
@@ -55,8 +55,7 @@ nlmclnt_block(struct nlm_host *host, struct file_lock *fl, u32 *statp)
	block.b_lock   = fl;
	init_waitqueue_head(&block.b_wait);
	block.b_status = NLM_LCK_BLOCKED;
	block.b_next   = nlm_blocked;
	nlm_blocked    = █
	list_add(&block.b_list, &nlm_blocked);

	/* Remember pseudo nsm state */
	pstate = host->h_state;
@@ -71,12 +70,7 @@ nlmclnt_block(struct nlm_host *host, struct file_lock *fl, u32 *statp)
	 */
	sleep_on_timeout(&block.b_wait, 30*HZ);

	for (head = &nlm_blocked; *head; head = &(*head)->b_next) {
		if (*head == &block) {
			*head = block.b_next;
			break;
		}
	}
	list_del(&block.b_list);

	if (!signalled()) {
		*statp = block.b_status;
@@ -105,7 +99,7 @@ nlmclnt_grant(struct nlm_lock *lock)
	 * Look up blocked request based on arguments. 
	 * Warning: must not use cookie to match it!
	 */
	for (block = nlm_blocked; block; block = block->b_next) {
	list_for_each_entry(block, &nlm_blocked, b_list) {
		if (nlm_compare_locks(block->b_lock, &lock->fl))
			break;
	}
@@ -230,7 +224,7 @@ restart:
	host->h_reclaiming = 0;

	/* Now, wake up all processes that sleep on a blocked lock */
	for (block = nlm_blocked; block; block = block->b_next) {
	list_for_each_entry(block, &nlm_blocked, b_list) {
		if (block->b_host == host) {
			block->b_status = NLM_LCK_DENIED_GRACE_PERIOD;
			wake_up(&block->b_wait);