[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87oab1pcy0.fsf@notabene.neil.brown.name>
Date: Sun, 28 Feb 2016 17:27:03 +1100
From: NeilBrown <neilb@...e.com>
To: Ross Zwisler <ross.zwisler@...ux.intel.com>,
Matthew Wilcox <matthew.r.wilcox@...el.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Jan Kara <jack@...e.cz>
Cc: linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org,
linux-mm@...ck.org
Subject: Re: [PATCH 3/3] radix-tree: support locking of individual exception entries.
On Sun, Feb 28 2016, NeilBrown <neilb@...e.com> wrote:
> +static int wake_slot_function(wait_queue_t *wait, unsigned mode, int sync,
> + void *arg)
> +{
> + struct wait_bit_key *key = arg;
> + struct wait_slot_queue *wait_slot =
> + container_of(wait, struct wait_slot_queue, wait);
> + void **slot;
> +
> + if (wait_slot->root != key->flags ||
> + wait_slot->index != key->timeout)
> + /* Not waking this waiter */
> + return 0;
> + if (wait_slot->state != SLOT_WAITING)
> + /* Should be impossible.... */
> + return 1;
> + if (key->bit_nr == -3)
> + /* Was just deleted, no point in doing a lookup */
> + wait_slot = NULL;
> + else
> + wait_slot->ret = __radix_tree_lookup(
> + wait_slot->root, wait_slot->index, NULL, &slot);
> + if (!wait_slot->ret || !radix_tree_exceptional_entry(wait_slot->ret)) {
> + wait_slot->state = SLOT_GONE;
> + return 1;
> + }
> + if (slot_locked(slot))
> + /* still locked */
> + return 0;
> + wait_slot->ret = lock_slot(slot);
> + wait_slot->state = SLOT_LOCKED;
> + return 1;
> +}
Sorry, just realized that this should:
return autoremove_wake_function(wait, mode, sync, arg);
instead of "return 1;"
NeilBrown
Download attachment "signature.asc" of type "application/pgp-signature" (819 bytes)
Powered by blists - more mailing lists