lkml.org 
[lkml]   [2014]   [Jul]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [dm-devel] [PATCH] dm bufio: fully initialize shrinker

On Thu, 31 Jul 2014, Greg Thelen wrote:

> 1d3d4437eae1 ("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>
Cc: stable@vger.kernel.org #v3.12

> ---
> drivers/md/dm-bufio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
> index 4e84095833db..d724459860d9 100644
> --- a/drivers/md/dm-bufio.c
> +++ b/drivers/md/dm-bufio.c
> @@ -1541,7 +1541,7 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign
> BUG_ON(block_size < 1 << SECTOR_SHIFT ||
> (block_size & (block_size - 1)));
>
> - c = kmalloc(sizeof(*c), GFP_KERNEL);
> + c = kzalloc(sizeof(*c), GFP_KERNEL);
> if (!c) {
> r = -ENOMEM;
> goto bad_client;
> --
> 2.0.0.526.g5318336
>
> --
> dm-devel mailing list
> dm-devel@redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel
>


\
 
 \ /
  Last update: 2014-07-31 19:21    [W:0.032 / U:0.784 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site