From: Nikolay Borisov <nborisov@suse.com>
To: David Sterba <dsterba@suse.com>, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 5/5] btrfs: document extent buffer locking
Date: Tue, 22 Oct 2019 12:53:29 +0300 [thread overview]
Message-ID: <42052ba1-8333-b15b-344f-3330041daf52@suse.com> (raw)
In-Reply-To: <ed989ccddbc8822e61df533d861d907ce0a43040.1571340084.git.dsterba@suse.com>
On 17.10.19 г. 22:39 ч., David Sterba wrote:
> Signed-off-by: David Sterba <dsterba@suse.com>
> ---
> fs/btrfs/locking.c | 110 +++++++++++++++++++++++++++++++++++++++------
> 1 file changed, 96 insertions(+), 14 deletions(-)
>
> diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c
> index e0e0430577aa..2a0e828b4470 100644
> --- a/fs/btrfs/locking.c
> +++ b/fs/btrfs/locking.c
> @@ -13,6 +13,48 @@
> #include "extent_io.h"
> #include "locking.h"
>
> +/*
> + * Extent buffer locking
> + * ~~~~~~~~~~~~~~~~~~~~~
> + *
> + * The locks use a custom scheme that allows to do more operations than are
> + * available fromt current locking primitives. The building blocks are still
> + * rwlock and wait queues.
> + *
> + * Required semantics:
Thinking out loud here..
> + *
> + * - reader/writer exclusion
RWSEM has that
> + * - writer/writer exclusion
RWSEM has that
> + * - reader/reader sharing
RWSEM has that
> + * - spinning lock semantics
RWSEM has that in the form of optimistic spinning which would be shorter
than what the custom implementation provides.
> + * - blocking lock semantics
RWSEM has that
> + * - try-lock semantics for readers and writers
down_write_trylock, down_read_trylock.
> + * - one level nesting, allowing read lock to be taken by the same thread that
> + * already has write lock
this might be somewhat problematic but there is downgrade_write which
could be used, I'll have to check.
> + *
> + * The extent buffer locks (also called tree locks) manage access to eb data.
> + * We want concurrency of many readers and safe updates. The underlying locking
> + * is done by read-write spinlock and the blocking part is implemented using
> + * counters and wait queues.
> + *
> + * spinning semantics - the low-level rwlock is held so all other threads that
> + * want to take it are spinning on it.
> + *
> + * blocking semantics - the low-level rwlock is not held but the counter
> + * denotes how many times the blocking lock was held;
> + * sleeping is possible
> + *
> + * Write lock always allows only one thread to access the data.
<snip>
next prev parent reply other threads:[~2019-10-22 9:53 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-17 19:38 [PATCH 0/5] Extent buffer locking and documentation David Sterba
2019-10-17 19:38 ` [PATCH 1/5] btrfs: merge blocking_writers branches in btrfs_tree_read_lock David Sterba
2019-10-17 19:38 ` [PATCH 2/5] btrfs: set blocking_writers directly, no increment or decrement David Sterba
2019-10-18 12:08 ` Nikolay Borisov
2019-10-18 17:31 ` David Sterba
2019-10-17 19:38 ` [PATCH 3/5] btrfs: access eb::blocking_writers according to ACCESS_ONCE policies David Sterba
2019-10-23 8:42 ` Nikolay Borisov
2019-10-29 21:33 ` David Sterba
2019-10-17 19:39 ` [PATCH 4/5] btrfs: serialize blocking_writers updates David Sterba
2019-10-23 9:57 ` Nikolay Borisov
2019-10-29 17:51 ` David Sterba
2019-10-29 18:48 ` Nikolay Borisov
2019-10-29 21:15 ` David Sterba
2019-10-17 19:39 ` [PATCH 5/5] btrfs: document extent buffer locking David Sterba
2019-10-18 0:17 ` Qu Wenruo
2019-10-18 11:56 ` David Sterba
2019-10-22 9:53 ` Nikolay Borisov [this message]
2019-10-22 10:41 ` David Sterba
2019-10-23 11:16 ` Nikolay Borisov
2019-10-29 17:33 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42052ba1-8333-b15b-344f-3330041daf52@suse.com \
--to=nborisov@suse.com \
--cc=dsterba@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).