Re: [PATCH v5 05/78] xarray: Replace exceptional entries

From: Kirill A. Shutemov
Date: Tue Dec 26 2017 - 12:15:56 EST


On Fri, Dec 15, 2017 at 02:03:37PM -0800, Matthew Wilcox wrote:
> From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx>
>
> Introduce xarray value entries to replace the radix tree exceptional
> entry code. This is a slight change in encoding to allow the use of an
> extra bit (we can now store BITS_PER_LONG - 1 bits in a value entry).
> It is also a change in emphasis; exceptional entries are intimidating
> and different. As the comment explains, you can choose to store values
> or pointers in the xarray and they are both first-class citizens.
>
> Signed-off-by: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx>
> ---
> arch/powerpc/include/asm/book3s/64/pgtable.h | 4 +-
> arch/powerpc/include/asm/nohash/64/pgtable.h | 4 +-
> drivers/gpu/drm/i915/i915_gem.c | 17 ++--
> drivers/staging/lustre/lustre/mdc/mdc_request.c | 2 +-
> fs/btrfs/compression.c | 2 +-
> fs/btrfs/inode.c | 4 +-
> fs/dax.c | 115 ++++++++++++------------
> fs/proc/task_mmu.c | 2 +-
> include/linux/fs.h | 48 ++++++----
> include/linux/radix-tree.h | 36 ++------
> include/linux/swapops.h | 19 ++--
> include/linux/xarray.h | 40 +++++++++
> lib/idr.c | 63 ++++++-------
> lib/radix-tree.c | 21 ++---
> mm/filemap.c | 10 +--
> mm/khugepaged.c | 2 +-
> mm/madvise.c | 2 +-
> mm/memcontrol.c | 2 +-
> mm/mincore.c | 2 +-
> mm/readahead.c | 2 +-
> mm/shmem.c | 10 +--
> mm/swap.c | 2 +-
> mm/truncate.c | 12 +--
> mm/workingset.c | 12 ++-
> tools/testing/radix-tree/idr-test.c | 6 +-
> tools/testing/radix-tree/linux/radix-tree.h | 1 +
> tools/testing/radix-tree/multiorder.c | 47 +++++-----
> tools/testing/radix-tree/test.c | 2 +-
> 28 files changed, 249 insertions(+), 240 deletions(-)

Everything looks fine to me after quick scan, but hat's a lot of changes for
one patch...

> @@ -565,7 +565,7 @@ unsigned long invalidate_mapping_pages(struct address_space *mapping,
> if (index > end)
> break;
>
> - if (radix_tree_exceptional_entry(page)) {
> + if (xa_is_value(page)) {
> invalidate_exceptional_entry(mapping, index,
> page);
> continue;
> @@ -696,7 +696,7 @@ int invalidate_inode_pages2_range(struct address_space *mapping,
> if (index > end)
> break;
>
> - if (radix_tree_exceptional_entry(page)) {
> + if (xa_is_value(page)) {
> if (!invalidate_exceptional_entry2(mapping,
> index, page))
> ret = -EBUSY;

invalidate_exceptional_entry? Are we going to leave the terminology here as is?

--
Kirill A. Shutemov