[PATCH 0/5] Fix races & improve the radix tree iterator patterns

From: Matthew Wilcox
Date: Wed Jan 27 2016 - 16:18:28 EST

From: Matthew Wilcox <willy@xxxxxxxxxxxxxxx>

The first two patches here are bugfixes, and I would like to see them
make their way into stable ASAP since they can lead to data corruption
(very low probabilty).

The last three patches do not qualify as bugfixes. They simply improve
the standard pattern used to do radix tree iterations by removing the
'goto restart' part. Partially this is because this is an ugly &
confusing goto, and partially because with multi-order entries in the
tree, it'll be more likely that we'll see an indirect_ptr bit, and
it's more efficient to kep going from the point of the iteration we're
currently in than restart from the beginning each time.

Matthew Wilcox (5):
radix-tree: Fix race in gang lookup
hwspinlock: Fix race between radix tree insertion and lookup
btrfs: Use radix_tree_iter_retry()
mm: Use radix_tree_iter_retry()
radix-tree,shmem: Introduce radix_tree_iter_next()

drivers/hwspinlock/hwspinlock_core.c | 4 +++
fs/btrfs/tests/btrfs-tests.c | 3 +-
include/linux/radix-tree.h | 31 +++++++++++++++++++++
lib/radix-tree.c | 12 ++++++--
mm/filemap.c | 53 ++++++++++++------------------------
mm/shmem.c | 30 ++++++++++----------
6 files changed, 78 insertions(+), 55 deletions(-)