OSDN Git Service

ida: do zeroing in ida_pre_get()
authorRasmus Villemoes <linux@rasmusvillemoes.dk>
Wed, 21 Feb 2018 22:45:43 +0000 (14:45 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 21 Feb 2018 23:35:43 +0000 (15:35 -0800)
commitb1a8a7a70043400d1e685899548c92b92f640d71
tree4295e3cb0440b43ad6a2b95a777b4bccb858bdb6
parent7ba716698cc53f8d5367766c93c538c7da6c68ce
ida: do zeroing in ida_pre_get()

As far as I can tell, the only place the per-cpu ida_bitmap is populated
is in ida_pre_get.  The pre-allocated element is stolen in two places in
ida_get_new_above, in both cases immediately followed by a memset(0).

Since ida_get_new_above is called with locks held, do the zeroing in
ida_pre_get, or rather let kmalloc() do it.  Also, apparently gcc
generates ~44 bytes of code to do a memset(, 0, 128):

  $ scripts/bloat-o-meter vmlinux.{0,1}
  add/remove: 0/0 grow/shrink: 2/1 up/down: 5/-88 (-83)
  Function                                     old     new   delta
  ida_pre_get                                  115     119      +4
  vermagic                                      27      28      +1
  ida_get_new_above                            715     627     -88

Link: http://lkml.kernel.org/r/20180108225634.15340-1-linux@rasmusvillemoes.dk
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Acked-by: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Eric Biggers <ebiggers@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/idr.c
lib/radix-tree.c