]> git.baikalelectronics.ru Git - kernel.git/commit
dm bufio: fully initialize shrinker
authorGreg Thelen <gthelen@google.com>
Thu, 31 Jul 2014 16:07:19 +0000 (09:07 -0700)
committerMike Snitzer <snitzer@redhat.com>
Fri, 1 Aug 2014 16:07:21 +0000 (12:07 -0400)
commitb1fe87ed3c9b53d5b71194e34a69b7cd8cfde065
treed662f6b63cbd1cf2d3177ec870237c677d1c5313
parent222815a13396f7627c2d7fba1177924dc5698256
dm bufio: fully initialize shrinker

a0d564babce1 ("vmscan: per-node deferred work") added a flags field to
struct shrinker assuming that all shrinkers were zero filled.  The dm
bufio shrinker is not zero filled, which leaves arbitrary kmalloc() data
in flags.  So far the only defined flags bit is SHRINKER_NUMA_AWARE.
But there are proposed patches which add other bits to shrinker.flags
(e.g. memcg awareness).

Rather than simply initializing the shrinker, this patch uses kzalloc()
when allocating the dm_bufio_client to ensure that the embedded shrinker
and any other similar structures are zeroed.

This fixes theoretical over aggressive shrinking of dm bufio objects.
If the uninitialized dm_bufio_client.shrinker.flags contains
SHRINKER_NUMA_AWARE then shrink_slab() would call the dm shrinker for
each numa node rather than just once.  This has been broken since 3.12.

Signed-off-by: Greg Thelen <gthelen@google.com>
Acked-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: stable@vger.kernel.org # v3.12+
drivers/md/dm-bufio.c