Re: [PATCH] btrfs: fix inconsistency during missing device rejoin

2017-12-15 Thread Anand Jain
@@ -715,7 +715,8 @@ static noinline int device_list_add(const char *path,   ret = 1;   device->fs_devices = fs_devices; -    } else if (!device->name || strcmp(device->name->str, path)) { +    } else if (!device->name || strcmp(device->name->str, path) || +    test_bi

[PATCH RESEND] btrfs: fix inconsistency during missing device rejoin

2017-12-15 Thread Anand Jain
When device is missing its not necessary that btrfs_device::name is null or the path is different when it reappears. Its possible that device can go missing after its been scanned where neither of btrfs_device::name == NULL OR btrfs_device::name != reappear_dev_path, is true. So just check for btrf

Re: exclusive subvolume space missing

2017-12-15 Thread Tomasz Pala
On Tue, Dec 12, 2017 at 08:50:15 +0800, Qu Wenruo wrote: > Even without snapshot, things can easily go crazy. > > This will write 128M file (max btrfs file extent size) and write it to disk. > # xfs_io -f -c "pwrite 0 128M" -c "sync" /mnt/btrfs/file > > Then, overwrite the 1~128M range. > # xfs_

Re: [4.14.3] btrfs out of space error

2017-12-15 Thread Ian Kumlien
On Fri, Dec 15, 2017 at 6:34 AM, Roman Mamedov wrote: > On Fri, 15 Dec 2017 01:39:03 +0100 > Ian Kumlien wrote: > >> Hi, >> >> Running a 4.14.3 kernel, this just happened, but there should have >> been another 20 gigs or so available. >> >> The filesystem seems fine after a reboot though > > What

Re: [4.14.3] btrfs out of space error

2017-12-15 Thread Qu Wenruo
On 2017年12月15日 16:36, Ian Kumlien wrote: > On Fri, Dec 15, 2017 at 6:34 AM, Roman Mamedov wrote: >> On Fri, 15 Dec 2017 01:39:03 +0100 >> Ian Kumlien wrote: >> >>> Hi, >>> >>> Running a 4.14.3 kernel, this just happened, but there should have >>> been another 20 gigs or so available. >>> >>> Th

[4.14] WARNING: CPU: 2 PID: 779 at fs/btrfs/backref.c:1255 find_parent_nodes+0x892/0x1340

2017-12-15 Thread Kai Krakow
Hello! During balance I'm seeing the following in dmesg: [194123.693226] [ cut here ] [194123.693231] WARNING: CPU: 2 PID: 779 at fs/btrfs/backref.c:1255 find_parent_nodes+0x892/0x1340 [194123.693232] Modules linked in: f2fs bridge stp llc cifs ccm xfs rfcomm bnep fuse c

[PATCH] btrfs: Add enospc_debug printing in metadata_reserve_bytes

2017-12-15 Thread Nikolay Borisov
Currently when enoscp_debug mount option is turned on we do not print any debug info in case metadata reservation failures happen. Fix this by adding the necessary hook in reserve_metadata_bytes. Signed-off-by: Nikolay Borisov --- fs/btrfs/extent-tree.c | 7 ++- 1 file changed, 6 insertions(

[PATCH] btrfs: Remove unused btrfs_start_transaction_lflush function

2017-12-15 Thread Nikolay Borisov
Commit 0e8c36a9fd81 ("Btrfs: fix lots of orphan inodes when the space is not enough") changed the way transaction reservation is made in btrfs_evict_node and as a result this function became unused. This has been the status quo for 5 years in which time no one noticed, so I'd say it's safe to assum

Re: [PATCH] mm: save/restore current->journal_info in handle_mm_fault

2017-12-15 Thread Jan Kara
On Fri 15-12-17 09:17:42, Yan, Zheng wrote: > On Fri, Dec 15, 2017 at 12:53 AM, Jan Kara wrote: > >> > > >> > In this particular case I'm not sure why does ceph pass 'filp' into > >> > readpage() / readpages() handler when it already gets that pointer as > >> > part > >> > of arguments... > >> >

[PATCH v2 1/6] btrfs: cleanup to make btrfs_free_stale_device() readable

2017-12-15 Thread Anand Jain
Now as the there is path in arg, so instead of reading the path from cur_device just get it from the caller, and so the purpose of cur_device is to skip the device, so rename it to skip_dev. Also drop the comment about different path being used for the same device, since now we will have cli to cle

Re: [PATCH] btrfs: Add enospc_debug printing in metadata_reserve_bytes

2017-12-15 Thread Qu Wenruo
On 2017年12月15日 18:05, Nikolay Borisov wrote: > Currently when enoscp_debug mount option is turned on we do not print > any debug info in case metadata reservation failures happen. Fix this > by adding the necessary hook in reserve_metadata_bytes. Reviewed-by: Qu Wenruo > > Signed-off-by: Niko

Re: [PATCH] btrfs: Add enospc_debug printing in metadata_reserve_bytes

2017-12-15 Thread Nikolay Borisov
On 15.12.2017 13:36, Qu Wenruo wrote: > . > > But btrfs_space_reservation() seems to be abused. > Every type from delalloc to enospc debug will use it. > > What about splitting them into different trace events? I think trace events form some sort of an ABI so we can't really be modifying curre

Naming of tag operations in the XArray

2017-12-15 Thread Matthew Wilcox
On Thu, Dec 14, 2017 at 08:22:14PM -0800, Matthew Wilcox wrote: > On Mon, Dec 11, 2017 at 03:10:22PM -0800, Randy Dunlap wrote: > > > +A freshly-initialised XArray contains a ``NULL`` pointer at every index. > > > +Each non-``NULL`` entry in the array has three bits associated with > > > +it called

[PATCH v2 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable

2017-12-15 Thread Anand Jain
Now as the there is path in arg, so instead of reading the path from cur_device just get it from the caller, and so the purpose of cur_device is to skip the device, so rename it to skip_dev. Also drop the comment about different path being used for the same device, since now we will have cli to cle

Re: [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales

2017-12-15 Thread Nikolay Borisov
On 15.12.2017 05:47, Anand Jain wrote: > Let the list iterator iterate further and find other stale > devices and delete it. This is in preparation to add support > for user land request-able stale devices cleanup. > > Signed-off-by: Anand Jain What is the lock protection of this function - uu

Re: [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional

2017-12-15 Thread Nikolay Borisov
On 15.12.2017 05:47, Anand Jain wrote: > This updates btrfs_free_stale_device() helper function to delete all > unmouted devices, when arg is NULL. > > Signed-off-by: Anand Jain > --- > fs/btrfs/volumes.c | 14 ++ > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/

Re: [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage

2017-12-15 Thread Nikolay Borisov
On 15.12.2017 05:47, Anand Jain wrote: > We call btrfs_free_stale_device() only when we alloc a new > struct btrfs_device (ret=1), so move it closer to where we > alloc the new device. Also drop the comments. > > Signed-off-by: Anand Jain > --- > fs/btrfs/volumes.c | 8 +--- > 1 file chang

Storing errors in the XArray

2017-12-15 Thread Matthew Wilcox
On Mon, Dec 11, 2017 at 03:10:22PM -0800, Randy Dunlap wrote: > > +The XArray does not support storing :c:func:`IS_ERR` pointers; some > > +conflict with data values and others conflict with entries the XArray > > +uses for its own purposes. If you need to store special values which > > +cannot be

[PATCH v10 3/5] bpf: add a bpf_override_function helper

2017-12-15 Thread Josef Bacik
From: Josef Bacik Error injection is sloppy and very ad-hoc. BPF could fill this niche perfectly with it's kprobe functionality. We could make sure errors are only triggered in specific call chains that we care about with very specific situations. Accomplish this with the bpf_override_funciton

[PATCH v10 2/5] btrfs: make open_ctree error injectable

2017-12-15 Thread Josef Bacik
From: Josef Bacik This allows us to do error injection with BPF for open_ctree. Signed-off-by: Josef Bacik Acked-by: Ingo Molnar --- fs/btrfs/disk-io.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 10a2a579cc7f..02b5f5667754 100644 --- a/f

[PATCH v10 4/5] samples/bpf: add a test for bpf_override_return

2017-12-15 Thread Josef Bacik
From: Josef Bacik This adds a basic test for bpf_override_return to verify it works. We override the main function for mounting a btrfs fs so it'll return -ENOMEM and then make sure that trying to mount a btrfs fs will fail. Acked-by: Alexei Starovoitov Acked-by: Ingo Molnar Signed-off-by: Jo

[PATCH v10 5/5] btrfs: allow us to inject errors at io_ctl_init

2017-12-15 Thread Josef Bacik
From: Josef Bacik This was instrumental in reproducing a space cache bug. Signed-off-by: Josef Bacik Acked-by: Ingo Molnar --- fs/btrfs/free-space-cache.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 4426d1c73e50..fb1382

[PATCH v10 0/5] Add the ability to do BPF directed error injection

2017-12-15 Thread Josef Bacik
Just one last go around I hope, fixed the preemption thing that Darrick reported. v9->v10: - the kprobe dispather now requires us to re-enable preemption if we change the ip ourselves, so do that. v8->v9: - rebased onto the bpf tree. v7->v8: - removed the _ASM_KPROBE_ERROR_INJECT since it was

[PATCH v10 1/5] add infrastructure for tagging functions as error injectable

2017-12-15 Thread Josef Bacik
From: Josef Bacik Using BPF we can override kprob'ed functions and return arbitrary values. Obviously this can be a bit unsafe, so make this feature opt-in for functions. Simply tag a function with KPROBE_ERROR_INJECT_SYMBOL in order to give BPF access to that function for error injection purpo

Re: [PATCH] Btrfs: make should_defrag_range() understood compressed extents

2017-12-15 Thread Timofey Titovets
Also, in theory that break following case: When fs mounted with compress=no, you can uncompress data by btrfs fi def -vr , because of "bug" in logic/defaults. And man page show that btrfs "Currently it’s not possible to select no compression. See also section EXAMPLES." I have a two simple patches

Re: [PATCH] fs/*/Kconfig: drop links to 404-compliant http://acl.bestbits.at

2017-12-15 Thread Steve French
Acked-by: Steve French On Tue, Dec 12, 2017 at 11:38 PM, Adam Borowski wrote: > This link is replicated in most filesystems' config stanzas. Referring > to an archived version of that site is pointless as it mostly deals with > patches; user documentation is available elsewhere. > > Signed-off-

[PATCH] btrfs: fix refcount_t usage when deleting btrfs_delayed_nodes

2017-12-15 Thread Chris Mason
refcounts have a generic implementation and an asm optimized one. The generic version has extra debugging to make sure that once a refcount goes to zero, refcount_inc won't increase it. The btrfs delayed inode code wasn't expecting this, and we're tripping over the warnings when the generic refco

Re: [PATCH v10 3/5] bpf: add a bpf_override_function helper

2017-12-15 Thread Alexei Starovoitov
On 12/15/17 11:12 AM, Josef Bacik wrote: +#ifdef CONFIG_BPF_KPROBE_OVERRIDE +BPF_CALL_2(bpf_override_return, struct pt_regs *, regs, unsigned long, rc) +{ + __this_cpu_write(bpf_kprobe_override, 1); + regs_set_return_value(regs, rc); + arch_ftrace_kprobe_override_function(regs);

Re: [PATCH v10 3/5] bpf: add a bpf_override_function helper

2017-12-15 Thread Daniel Borkmann
On 12/15/2017 09:34 PM, Alexei Starovoitov wrote: [...] > Also how big is the v9-v10 change ? > May be do it as separate patch, since previous set already sitting > in bpf-next and there are patches on top? +1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of

[PATCH] Btrfs: allow btrfs_defrag_file() uncompress files on defragmentation

2017-12-15 Thread Timofey Titovets
Currently defrag ioctl only support compress files with specified compression type. Allow set compression type to none, while call defrag. Signed-off-by: Timofey Titovets --- fs/btrfs/btrfs_inode.h | 1 + fs/btrfs/inode.c | 4 ++-- fs/btrfs/ioctl.c | 17 ++--- 3 files c

[PATCH v5 52/78] btrfs: Convert page cache to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- fs/btrfs/compression.c | 4 +--- fs/btrfs/extent_io.c | 6 ++ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index e687d06cd97c..4174b166e235 100644 --- a/fs/btrfs/compre

[PATCH v5 37/78] mm: Convert page migration to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- mm/migrate.c | 41 - 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/mm/migrate.c b/mm/migrate.c index 75d19904dd9a..7122fec9b075 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -322,7

[PATCH v5 65/78] dax: Convert grab_mapping_entry to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- fs/dax.c | 98 +--- 1 file changed, 26 insertions(+), 72 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index a3e795ad2493..f591ab5be590 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -44

[PATCH v5 71/78] xfs: Convert m_perag_tree to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Getting rid of the m_perag_lock lets us also get rid of the call to radix_tree_preload(). This is a relatively naive conversion; we could improve performance over the radix tree implementation by passing around xa_state pointers instead of indices, possibly at the expense of

[PATCH v5 73/78] xfs: Convert xfs dquot to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a pretty straight-forward conversion. Signed-off-by: Matthew Wilcox --- fs/xfs/xfs_dquot.c | 38 +- fs/xfs/xfs_qm.c| 32 fs/xfs/xfs_qm.h| 18 +- 3 files changed, 46 inserti

[PATCH v5 61/78] dax: Convert __dax_invalidate_mapping_entry to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Simple now that we already have an xa_state! Signed-off-by: Matthew Wilcox --- fs/dax.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 2629ffa70575..d3894c15609a 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -413,24 +413,

[PATCH v5 04/78] page cache: Use xa_lock

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Remove the address_space ->tree_lock and use the xa_lock newly added to the radix_tree_root. Rename the address_space ->page_tree to ->pages, since we don't really care that it's a tree. Take the opportunity to rearrange the elements of address_space to pack them better on

[PATCH v5 23/78] ida: Convert to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Use the xarray infrstructure like we used the radix tree infrastructure. This lets us get rid of idr_get_free() from the radix tree code. Signed-off-by: Matthew Wilcox --- include/linux/idr.h| 8 +- include/linux/radix-tree.h | 4 - lib/idr.c |

[PATCH v5 66/78] dax: Fix sparse warning

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox sparse doesn't know that follow_pte_pmd conditionally acquires the ptl, so add an annotation to let it know what's going on. Signed-off-by: Matthew Wilcox --- fs/dax.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/dax.c b/fs/dax.c index f591ab5be590..6ef727af30f0

[PATCH v5 19/78] xarray: Add xas_create_range

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This hopefully temporary function is useful for users who have not yet been converted to multi-index entries. Signed-off-by: Matthew Wilcox --- include/linux/xarray.h | 2 ++ lib/xarray.c | 22 ++ 2 files changed, 24 insertions(+) diff --git

[PATCH v5 46/78] shmem: Convert shmem_wait_for_pins to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox As with shmem_tag_pins(), hold the lock around the entire loop instead of acquiring & dropping it for each entry we're going to untag. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 59 --- 1 file changed, 24 insertio

[PATCH v5 15/78] xarray: Add xas_for_each_tag

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This iterator operates across each tagged entry in the specified range. We do not yet have a user for an xa_for_each_tag iterator, but it would be straight-forward to add one if needed. This commit also includes xas_find_tag() and xas_next_tag(). Signed-off-by: Matthew Wilc

[PATCH v5 38/78] mm: Convert huge_memory to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Quite a straightforward conversion. Signed-off-by: Matthew Wilcox --- mm/huge_memory.c | 19 --- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 28909c475ee5..5a41b00d86bd 100644 --- a/mm/huge_memory.

[PATCH v5 03/78] xarray: Add the xa_lock to the radix_tree_root

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This results in no change in structure size on 64-bit x86 as it fits in the padding between the gfp_t and the void *. Signed-off-by: Matthew Wilcox --- fs/f2fs/gc.c | 2 +- include/linux/idr.h| 12 ++-- include/linux/radix-tree.h

[PATCH v5 50/78] shmem: Convert shmem_partial_swap_usage to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Simpler code because the xarray takes care of things like the limit and dereferencing the slot. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 18 +++--- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index dd663341e01e..

[PATCH v5 28/78] page cache: Convert page cache lookups to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Introduce page_cache_pin() to factor out the common logic between the various lookup routines: find_get_entry find_get_entries find_get_pages_range find_get_pages_contig find_get_pages_range_tag find_get_entries_tag filemap_map_pages By using the xa_state to control the ite

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

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox 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 intimida

[PATCH v5 10/78] xarray: Add xa_load

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This first function in the XArray API brings with it a lot of support infrastructure. The advanced API is based around the xa_state which is a more capable version of the radix_tree_iter. As the test-suite demonstrates, it is possible to use the xarray and radix tree APIs o

[PATCH v5 43/78] shmem: Convert shmem_confirm_swap to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox xa_load has its own RCU locking, so we can eliminate it here. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 7 +-- 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index fad6c9e7402e..654f367aca90 100644 --- a/mm/shmem.c +++ b/mm/sh

[PATCH v5 11/78] xarray: Add xa_get_tag, xa_set_tag and xa_clear_tag

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox XArray tags are slightly more strongly typed than the radix tree tags, but occupy the same bits. This commit also adds the xas_ family of tag operations, for cases where the caller is already holding the lock, and xa_tagged() to ask whether any array member has a particular

[PATCH v5 78/78] fscache: Convert to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Removes another user of radix_tree_preload(). Signed-off-by: Matthew Wilcox --- fs/fscache/cookie.c | 6 +- fs/fscache/internal.h | 2 +- fs/fscache/object.c | 2 +- fs/fscache/page.c | 152 +--- fs/fscache/

[PATCH v5 16/78] xarray: Add xa_get_entries, xa_get_tagged and xa_get_maybe_tag

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox These functions allow a range of xarray entries to be extracted into a compact normal array. Signed-off-by: Matthew Wilcox --- include/linux/xarray.h | 27 lib/xarray.c | 88 ++ 2 files changed, 115

[PATCH v5 24/78] page cache: Convert hole search to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox The page cache offers the ability to search for a miss in the previous or next N locations. Rather than teach the XArray about the page cache's definition of a miss, use xas_prev() and xas_next() to search the page array. This should be more efficient as it does not have to

[PATCH v5 76/78] md: Convert raid5-cache to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is the first user of the radix tree I've converted which was storing numbers rather than pointers. I'm fairly pleased with how well it came out. There's less boiler-plate involved than there was with the radix tree, so that's a win. It does use the advanced API, and I

[PATCH v5 01/78] xfs: Rename xa_ elements to ail_

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a simple rename, except that xa_ail becomes ail_head. Signed-off-by: Matthew Wilcox --- fs/xfs/xfs_buf_item.c| 10 ++-- fs/xfs/xfs_dquot.c | 4 +- fs/xfs/xfs_dquot_item.c | 11 ++-- fs/xfs/xfs_inode_item.c | 22 +++ fs/xfs/xfs_log.c |

[PATCH v5 07/78] xarray: Add definition of struct xarray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a direct replacement for struct radix_tree_root. Some of the struct members have changed name; convert those, and use a #define so that radix_tree users continue to work without change. Signed-off-by: Matthew Wilcox --- include/linux/radix-tree.h | 3

[PATCH v5 22/78] idr: Convert to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox The IDR distinguishes between unallocated entries (read as NULL) and entries where the user has chosen to store NULL. The radix tree was modified to consider NULL entries which had tag 0 _clear_ as being allocated, but it added a lot of complexity. Instead, the XArray has a

[PATCH v5 13/78] xarray: Add xa_cmpxchg

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This works like doing cmpxchg() on an array entry. Code which wants the radix_tree_insert() semantic of not overwriting an existing entry can cmpxchg() with NULL and get the action it wants. Plus, instead of having an error returned, they get the value currently stored in t

[PATCH v5 70/78] brd: Convert to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Convert brd_pages from a radix tree to an XArray. Simpler and smaller code; in particular another user of radix_tree_preload is eliminated. Signed-off-by: Matthew Wilcox --- drivers/block/brd.c | 93 - 1 file changed, 28

[PATCH v5 09/78] xarray: Add documentation

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is documentation on how to use the XArray, not details about its internal implementation. Signed-off-by: Matthew Wilcox --- Documentation/core-api/index.rst | 1 + Documentation/core-api/xarray.rst | 340 ++ 2 files changed, 341

[PATCH v5 36/78] mm: Convert __do_page_cache_readahead to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This one is trivial. Signed-off-by: Matthew Wilcox --- mm/readahead.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mm/readahead.c b/mm/readahead.c index f64b31b3a84a..66bcaffd47f0 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -174,9 +174,7 @

[PATCH v5 68/78] mm: Convert cgroup writeback to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a fairly naive conversion, leaving in place the GFP_ATOMIC allocation. By switching the locking around, we could use GFP_KERNEL and probably simplify the error handling. Signed-off-by: Matthew Wilcox --- include/linux/backing-dev-defs.h | 2 +- include/linux/back

[PATCH v5 12/78] xarray: Add xa_store

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox xa_store() differs from radix_tree_insert() in that it will overwrite an existing element in the array rather than returning an error. This is the behaviour which most users want, and those that want more complex behaviour generally want to use the xas family of routines any

[PATCH v5 26/78] page cache: Add and replace pages using the XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Use the XArray APIs to add and replace pages in the page cache. This removes two uses of the radix tree preload API and is significantly shorter code. Signed-off-by: Matthew Wilcox --- mm/filemap.c | 143 +-- 1 file

[PATCH v5 21/78] xarray: Add ability to store errno values

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox While the radix tree offers no ability to store IS_ERR pointers, documenting that the XArray does not led to some concern. Here is a sanctioned way to store errnos in the XArray. I'm concerned that it will confuse people who can't tell the difference between xa_is_err() and

[PATCH v5 32/78] mm: Convert workingset to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox We construct a fake XA_STATE and use it to delete the node with xa_store() rather than adding a special function for this unique use case. Signed-off-by: Matthew Wilcox --- include/linux/swap.h | 4 ++-- mm/workingset.c | 49 +-

[PATCH v5 35/78] mm: Convert delete_from_swap_cache to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Both callers of __delete_from_swap_cache have the swp_entry_t already, so pass that in to make constructing the XA_STATE easier. Signed-off-by: Matthew Wilcox --- include/linux/swap.h | 5 +++-- mm/swap_state.c | 24 ++-- mm/vmscan.c | 2

[PATCH v5 56/78] f2fs: Convert to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a straightforward conversion. Signed-off-by: Matthew Wilcox --- fs/f2fs/data.c | 3 +-- fs/f2fs/dir.c| 5 + fs/f2fs/inline.c | 6 +- fs/f2fs/node.c | 10 ++ 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/fs/f2fs/data.c b/

[PATCH v5 54/78] fs: Convert writeback to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox A couple of short loops. Signed-off-by: Matthew Wilcox --- fs/fs-writeback.c | 25 + 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index e2c1ca667d9a..897a89489fe9 100644 --- a/fs/fs-writeback.c

[PATCH v5 08/78] xarray: Define struct xa_node

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a direct replacement for struct radix_tree_node. A couple of struct members have changed name, so convert those. Use a #define so that radix tree users continue to work without change. Signed-off-by: Matthew Wilcox --- include/linux/radix-tree.h| 29 +

[PATCH v5 64/78] dax: Convert dax_insert_mapping_entry to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- fs/dax.c | 18 ++ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 9cfd4fcc0b0d..a3e795ad2493 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -498,9 +498,9 @@ static void *dax_insert_mapping_e

[PATCH v5 58/78] dax: Convert dax_unlock_mapping_entry to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Replace slot_locked() with dax_locked() and inline unlock_slot() into its only caller. Signed-off-by: Matthew Wilcox --- fs/dax.c | 48 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/fs/dax.c b/fs/dax.c inde

[PATCH v5 55/78] nilfs2: Convert to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox I'm not 100% convinced that the rewrite of nilfs_copy_back_pages is correct, but it will at least have different bugs from the current version. Signed-off-by: Matthew Wilcox --- fs/nilfs2/btnode.c | 37 +++- fs/nilfs2/page.c | 72 +

[PATCH v5 62/78] dax: Convert dax_writeback_one to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Likewise easy Signed-off-by: Matthew Wilcox --- fs/dax.c | 17 +++-- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index d3894c15609a..d6dd779e1b46 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -633,8 +633,7 @@ static int dax_writ

[PATCH v5 00/78] XArray v5

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Again, this patch set does not apply to any particular tree because it depends on things which are purely noise, and I'm trying to keep the patch count down [1]. If you want it in a git tree, try http://git.infradead.org/users/willy/linux-dax.git/shortlog/refs/heads/xarray-2

[PATCH v5 72/78] xfs: Convert pag_ici_root to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Rename pag_ici_root to pag_ici_xa and use XArray APIs instead of radix tree APIs. Shorter code, typechecking on tag numbers, better error checking in xfs_reclaim_inode(), and eliminates a call to radix_tree_preload(). Signed-off-by: Matthew Wilcox --- fs/xfs/libxfs/xfs_sb

[PATCH v5 47/78] shmem: Convert shmem_add_to_page_cache to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This removes the last caller of radix_tree_maybe_preload_order(). Simpler code, unless we run out of memory for new xa_nodes partway through inserting entries into the xarray. Hopefully we can support multi-index entries in the page cache soon and all the awful code goes awa

[PATCH v5 75/78] usb: Convert xhci-mem to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox The XArray API is a slightly better fit for xhci_insert_segment_mapping() than the radix tree API was. Signed-off-by: Matthew Wilcox --- drivers/usb/host/xhci-mem.c | 68 +++-- drivers/usb/host/xhci.h | 6 ++-- 2 files changed,

[PATCH v5 02/78] fscache: Use appropriate radix tree accessors

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Don't open-code accesses to data structure internals. Signed-off-by: Matthew Wilcox --- fs/fscache/cookie.c | 2 +- fs/fscache/object.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c index ff84258132bb..e905

[PATCH v5 31/78] mm: Convert page-writeback to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Includes moving mapping_tagged() to fs.h as a static inline, and changing it to return bool. Signed-off-by: Matthew Wilcox --- include/linux/fs.h | 17 +-- mm/page-writeback.c | 62 +++-- 2 files changed, 32 inse

[PATCH v5 29/78] page cache: Convert delete_batch to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Rename the function from page_cache_tree_delete_batch to just page_cache_delete_batch. Signed-off-by: Matthew Wilcox --- mm/filemap.c | 23 +-- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 94496567d2c2

[PATCH v5 45/78] shmem: Convert shmem_tag_pins to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Simplify the locking by taking the spinlock while we walk the tree on the assumption that many acquires and releases of the lock will be worse than holding the lock for a (potentially) long time. We could replicate the same locking behaviour with the xarray, but would have t

[PATCH v5 34/78] mm: Convert add_to_swap_cache to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Combine __add_to_swap_cache and add_to_swap_cache into one function since there is no more need to preload. Signed-off-by: Matthew Wilcox --- mm/swap_state.c | 93 ++--- 1 file changed, 29 insertions(+), 64 deletions(-)

[PATCH v5 41/78] pagevec: Use xa_tag_t

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Removes sparse warnings. Signed-off-by: Matthew Wilcox --- fs/btrfs/extent_io.c| 4 ++-- fs/ext4/inode.c | 2 +- fs/f2fs/data.c | 2 +- fs/gfs2/aops.c | 2 +- include/linux/pagevec.h | 8 +--- mm/swap.c | 4 ++-- 6 files chan

[PATCH v5 49/78] shmem: Convert shmem_free_swap to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a perfect use for xa_cmpxchg(). Note the use of 0 for GFP flags; we won't be allocating memory. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 7 ++- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index bd66bbd40499..dd66

[PATCH v5 20/78] xarray: Add MAINTAINERS entry

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Add myself as XArray and IDR maintainer. Signed-off-by: Matthew Wilcox --- MAINTAINERS | 12 1 file changed, 12 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 82ad0eabce4f..bb5ffa12cf8c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14894,6 +14894

[PATCH v5 27/78] page cache: Convert page deletion to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox The code is slightly shorter and simpler. Signed-off-by: Matthew Wilcox --- mm/filemap.c | 26 -- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 91df92f5c96d..c9bc0dee0154 100644 --- a/mm/filemap.c

[PATCH v5 67/78] page cache: Finish XArray conversion

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox With no more radix tree API users left, we can drop the GFP flags and use xa_init() instead of INIT_RADIX_TREE(). Signed-off-by: Matthew Wilcox --- fs/inode.c | 2 +- include/linux/fs.h | 2 +- mm/swap_state.c| 2 +- 3 files changed, 3 insertions(+), 3 deletion

[PATCH v5 59/78] dax: Convert lock_slot to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- fs/dax.c | 22 -- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index dd4674ce48f5..46a4d83b1b46 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -188,12 +188,11 @@ static void dax_wake_mappi

[PATCH v5 74/78] xfs: Convert mru cache to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This eliminates a call to radix_tree_preload(). Signed-off-by: Matthew Wilcox --- fs/xfs/xfs_mru_cache.c | 72 +++--- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c

[PATCH v5 25/78] page cache: Add page_cache_range_empty function

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox btrfs has its own custom function for determining whether the page cache has any pages in a particular range. Move this functionality to the page cache, and call it from btrfs. Signed-off-by: Matthew Wilcox --- fs/btrfs/btrfs_inode.h | 7 - fs/btrfs/inode.c|

[PATCH v5 14/78] xarray: Add xa_for_each

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This iterator allows the user to efficiently walk a range of the array, executing the loop body once for each non-NULL entry in that range. This commit also includes xa_find() and xa_next() which are helper functions for xa_for_each() but may also be useful in their own right

[PATCH v5 18/78] xarray: Add xas_next and xas_prev

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox These two functions move the xas index by one position, and adjust the rest of the iterator state to match it. This is more efficient than calling xas_set() as it keeps the iterator at the leaves of the tree instead of walking the iterator from the root each time. Signed-of

[PATCH v5 51/78] shmem: Comment fixups

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Remove the last mentions of radix tree from various comments. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index ecf05645509b..3cfc247e4796 100644 --- a/mm/shmem.c ++

[PATCH v5 30/78] page cache: Remove stray radix comment

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- mm/filemap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/filemap.c b/mm/filemap.c index 92ddee25f19b..75d1b32080a4 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2603,7 +2603,7 @@ static struct page *do_read_cac

[PATCH v5 44/78] shmem: Convert find_swap_entry to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This is a 1:1 conversion. Signed-off-by: Matthew Wilcox --- mm/shmem.c | 23 +++ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index 654f367aca90..ce285ae635ea 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1076,2

[PATCH v5 60/78] dax: More XArray conversion

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox This time, we want to convert get_unlocked_mapping_entry() to use the XArray. That has a ripple effect, causing us to change the waitqueues to hash on the address of the xarray rather than the address of the mapping (functionally equivalent), and create a lot of on-the-stack

[PATCH v5 06/78] xarray: Change definition of sibling entries

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Instead of storing a pointer to the slot containing the canonical entry, store the offset of the slot. Produces slightly more efficient code (~300 bytes) and simplifies the implementation. Signed-off-by: Matthew Wilcox --- include/linux/xarray.h | 82 +

[PATCH v5 63/78] dax: Convert dax_insert_pfn_mkwrite to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox Signed-off-by: Matthew Wilcox --- fs/dax.c | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index d6dd779e1b46..9cfd4fcc0b0d 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -1498,21 +1498,21 @@ static int dax_insert_pfn_mkwrite(struct

[PATCH v5 39/78] mm: Convert collapse_shmem to XArray

2017-12-15 Thread Matthew Wilcox
From: Matthew Wilcox I found another victim of the radix tree being hard to use. Because there was no call to radix_tree_preload(), khugepaged was allocating radix_tree_nodes using GFP_ATOMIC. I also converted a local_irq_save()/restore() pair to disable()/enable(). Signed-off-by: Matthew Wilc

  1   2   >