Merge branch 'idr-4.11' of git://git.infradead.org/users/willy/linux-dax
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Mar 2017 04:29:41 +0000 (20:29 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Mar 2017 04:29:41 +0000 (20:29 -0800)
Pull IDR rewrite from Matthew Wilcox:
 "The most significant part of the following is the patch to rewrite the
  IDR & IDA to be clients of the radix tree. But there's much more,
  including an enhancement of the IDA to be significantly more space
  efficient, an IDR & IDA test suite, some improvements to the IDR API
  (and driver changes to take advantage of those improvements), several
  improvements to the radix tree test suite and RCU annotations.

  The IDR & IDA rewrite had a good spin in linux-next and Andrew's tree
  for most of the last cycle. Coupled with the IDR test suite, I feel
  pretty confident that any remaining bugs are quite hard to hit. 0-day
  did a great job of watching my git tree and pointing out problems; as
  it hit them, I added new test-cases to be sure not to be caught the
  same way twice"

Willy goes on to expand a bit on the IDR rewrite rationale:
 "The radix tree and the IDR use very similar data structures.

  Merging the two codebases lets us share the memory allocation pools,
  and results in a net deletion of 500 lines of code. It also opens up
  the possibility of exposing more of the features of the radix tree to
  users of the IDR (and I have some interesting patches along those
  lines waiting for 4.12)

  It also shrinks the size of the 'struct idr' from 40 bytes to 24 which
  will shrink a fair few data structures that embed an IDR"

* 'idr-4.11' of git://git.infradead.org/users/willy/linux-dax: (32 commits)
  radix tree test suite: Add config option for map shift
  idr: Add missing __rcu annotations
  radix-tree: Fix __rcu annotations
  radix-tree: Add rcu_dereference and rcu_assign_pointer calls
  radix tree test suite: Run iteration tests for longer
  radix tree test suite: Fix split/join memory leaks
  radix tree test suite: Fix leaks in regression2.c
  radix tree test suite: Fix leaky tests
  radix tree test suite: Enable address sanitizer
  radix_tree_iter_resume: Fix out of bounds error
  radix-tree: Store a pointer to the root in each node
  radix-tree: Chain preallocated nodes through ->parent
  radix tree test suite: Dial down verbosity with -v
  radix tree test suite: Introduce kmalloc_verbose
  idr: Return the deleted entry from idr_remove
  radix tree test suite: Build separate binaries for some tests
  ida: Use exceptional entries for small IDAs
  ida: Move ida_bitmap to a percpu variable
  Reimplement IDR and IDA using the radix tree
  radix-tree: Add radix_tree_iter_delete
  ...

1  2 
drivers/block/drbd/drbd_main.c
drivers/target/target_core_user.c
init/main.c
lib/Makefile
lib/radix-tree.c
mm/workingset.c
net/mac80211/status.c
tools/include/linux/compiler.h

Simple merge
Simple merge
diff --cc init/main.c
Simple merge
diff --cc lib/Makefile
index 469b2392893ab080b8529e2ef5a7d2993035ca90,43a80ec3bd104917285ddc279e525d1b50690cda..320ac46a8725b6f9dac0726767a4976a2bd8907c
@@@ -22,13 -22,14 +22,16 @@@ lib-y := ctype.o string.o vsprintf.o cm
         sha1.o chacha20.o md5.o irq_regs.o argv_split.o \
         flex_proportions.o ratelimit.o show_mem.o \
         is_single_threaded.o plist.o decompress.o kobject_uevent.o \
 -       earlycpio.o seq_buf.o nmi_backtrace.o nodemask.o win_minmax.o
 +       earlycpio.o seq_buf.o siphash.o \
 +       nmi_backtrace.o nodemask.o win_minmax.o
  
+ CFLAGS_radix-tree.o += -DCONFIG_SPARSE_RCU_POINTER
+ CFLAGS_idr.o += -DCONFIG_SPARSE_RCU_POINTER
  lib-$(CONFIG_MMU) += ioremap.o
  lib-$(CONFIG_SMP) += cpumask.o
 -lib-$(CONFIG_HAS_DMA) += dma-noop.o
 +lib-$(CONFIG_DMA_NOOP_OPS) += dma-noop.o
 +lib-$(CONFIG_DMA_VIRT_OPS) += dma-virt.o
  
  lib-y += kobject.o klist.o
  obj-y += lockref.o
index 72fab4999c00662a187536ee66c6084eb69a8b11,9c0fa4df736b9575a2f2f1d66c8fb19f4a4b02a1..5ed506d648c4e53ee955e9c19b942fd0d666eee1
@@@ -1098,11 -1223,10 +1223,11 @@@ void __radix_tree_replace(struct radix_
   * radix_tree_iter_replace().
   */
  void radix_tree_replace_slot(struct radix_tree_root *root,
-                            void **slot, void *item)
+                            void __rcu **slot, void *item)
  {
-       replace_slot(root, NULL, slot, item, true);
+       __radix_tree_replace(root, NULL, slot, item, NULL, NULL);
  }
 +EXPORT_SYMBOL(radix_tree_replace_slot);
  
  /**
   * radix_tree_iter_replace - replace item in a slot
diff --cc mm/workingset.c
Simple merge
Simple merge
Simple merge