From: Jan Kara <jack@suse.cz>
To: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Jan Kara <jack@suse.cz>, Matthew Wilcox <willy@linux.intel.com>,
linux-fsdevel@vger.kernel.org, "Wilcox,
Matthew R" <matthew.r.wilcox@intel.com>,
NeilBrown <neilb@suse.com>,
linux-nvdimm@lists.01.org
Subject: Re: [PATCH 02/10] radix-tree: make 'indirect' bit available to exception entries.
Date: Thu, 24 Mar 2016 13:31:16 +0100 [thread overview]
Message-ID: <20160324123116.GF4025@quack.suse.cz> (raw)
In-Reply-To: <20160323164144.GA5544@linux.intel.com>
On Wed 23-03-16 10:41:44, Ross Zwisler wrote:
> On Tue, Mar 22, 2016 at 11:37:54AM +0100, Jan Kara wrote:
> > On Tue 22-03-16 05:27:08, Matthew Wilcox wrote:
> > > On Tue, Mar 22, 2016 at 10:12:32AM +0100, Jan Kara wrote:
> > > > if (unlikely(!page)) // False since
> > > > // RADIX_TREE_INDIRECT_PTR is set
> > > > if (radix_tree_exception(page)) // False - no exeptional bit
> > >
> > > Oops, you got confused:
> > >
> > > static inline int radix_tree_exception(void *arg)
> > > {
> > > return unlikely((unsigned long)arg &
> > > (RADIX_TREE_INDIRECT_PTR | RADIX_TREE_EXCEPTIONAL_ENTRY));
> > > }
> >
> > Ah, I've confused radix_tree_exception() and
> > radix_tree_exceptional_entry(). OK, so your code works AFAICT. But using
> > RADIX_TREE_RETRY still doesn't make things clearer to me - you still need
> > to check for INDIRECT bit in the retry logic to catch the
> > radix_tree_extend() race as well...
> >
> > As a side note I think we should do away with radix_tree_exception() - it
> > isn't very useful (doesn't simplify any of its callers) and only creates
> > possibility for confusion.
>
> Perhaps it would be clearer if we explicitly enumerated the four radix tree
> entry types?
>
> #define RADIX_TREE_TYPE_MASK 3
>
> #define RADIX_TREE_TYPE_DATA 0
> #define RADIX_TREE_TYPE_INDIRECT 1
> #define RADIX_TREE_TYPE_EXCEPTIONAL 2
> #define RADIX_TREE_TYPE_LOCKED_EXC 3
>
> This would make radix_tree_exception (which we could rename so it doesn't
> get confused with "exceptional" entries):
>
> static inline int radix_tree_non_data(void *arg)
> {
> return unlikely((unsigned long)arg & RADIX_TREE_TYPE_MASK);
> }
>
> Etc? I guess we'd have to code it up and see if the result was simpler, but
> it seems like it might be.
Well, for now I have decided to postpone tricks with saving exceptional
entry bits and just used bit 2 for the lock bit for DAX exceptional entries
because the retry logic in the RCU walking code got rather convoluted with
that. If we ever feel we are running out of bits in the entry, we can
always look again at compressing the contents more.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
next prev parent reply other threads:[~2016-03-24 12:30 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-21 13:22 [RFC v2] [PATCH 0/10] DAX page fault locking Jan Kara
2016-03-21 13:22 ` [PATCH 01/10] DAX: move RADIX_DAX_ definitions to dax.c Jan Kara
2016-03-21 17:25 ` Matthew Wilcox
2016-03-21 13:22 ` [PATCH 02/10] radix-tree: make 'indirect' bit available to exception entries Jan Kara
2016-03-21 17:34 ` Matthew Wilcox
2016-03-22 9:12 ` Jan Kara
2016-03-22 9:27 ` Matthew Wilcox
2016-03-22 10:37 ` Jan Kara
2016-03-23 16:41 ` Ross Zwisler
2016-03-24 12:31 ` Jan Kara [this message]
2016-03-21 13:22 ` [PATCH 03/10] dax: Remove complete_unwritten argument Jan Kara
2016-03-23 17:12 ` Ross Zwisler
2016-03-24 12:32 ` Jan Kara
2016-03-21 13:22 ` [PATCH 04/10] dax: Fix data corruption for written and mmapped files Jan Kara
2016-03-23 17:39 ` Ross Zwisler
2016-03-24 12:51 ` Jan Kara
2016-03-29 15:17 ` Ross Zwisler
2016-03-21 13:22 ` [PATCH 05/10] dax: Allow DAX code to replace exceptional entries Jan Kara
2016-03-23 17:52 ` Ross Zwisler
2016-03-24 10:42 ` Jan Kara
2016-03-21 13:22 ` [PATCH 06/10] dax: Remove redundant inode size checks Jan Kara
2016-03-23 21:08 ` Ross Zwisler
2016-03-21 13:22 ` [PATCH 07/10] dax: Disable huge page handling Jan Kara
2016-03-23 20:50 ` Ross Zwisler
2016-03-24 12:56 ` Jan Kara
2016-03-21 13:22 ` [PATCH 08/10] dax: New fault locking Jan Kara
2016-03-29 21:57 ` Ross Zwisler
2016-03-31 16:27 ` Jan Kara
2016-03-21 13:22 ` [PATCH 09/10] dax: Use radix tree entry lock to protect cow faults Jan Kara
2016-03-21 19:11 ` Matthew Wilcox
2016-03-22 7:03 ` Jan Kara
2016-03-29 22:18 ` Ross Zwisler
2016-03-21 13:22 ` [PATCH 10/10] dax: Remove i_mmap_lock protection Jan Kara
2016-03-29 22:17 ` Ross Zwisler
2016-03-21 17:41 ` [RFC v2] [PATCH 0/10] DAX page fault locking Matthew Wilcox
2016-03-23 15:09 ` Jan Kara
2016-03-23 20:50 ` Matthew Wilcox
2016-03-24 10:00 ` Matthew Wilcox
2016-03-22 19:32 ` Ross Zwisler
2016-03-22 21:07 ` Toshi Kani
2016-03-22 21:15 ` Dave Chinner
2016-03-23 9:45 ` Jan Kara
2016-03-23 15:11 ` Toshi Kani
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=20160324123116.GF4025@quack.suse.cz \
--to=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-nvdimm@lists.01.org \
--cc=matthew.r.wilcox@intel.com \
--cc=neilb@suse.com \
--cc=ross.zwisler@linux.intel.com \
--cc=willy@linux.intel.com \
/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).