Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934175AbcJURkW (ORCPT ); Fri, 21 Oct 2016 13:40:22 -0400 Received: from mga14.intel.com ([192.55.52.115]:6062 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933375AbcJURkV (ORCPT ); Fri, 21 Oct 2016 13:40:21 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,377,1473145200"; d="scan'208";a="1073817655" Date: Fri, 21 Oct 2016 10:40:20 -0700 From: Tim Chen To: Christian Borntraeger Cc: Andrew Morton , Ying Huang , dave.hansen@intel.com, ak@linux.intel.com, aaron.lu@intel.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Hugh Dickins , Shaohua Li , Minchan Kim , Rik van Riel , Andrea Arcangeli , "Kirill A . Shutemov" , Vladimir Davydov , Johannes Weiner , Michal Hocko , Hillf Danton Subject: Re: [PATCH v2 0/8] mm/swap: Regular page swap optimizations Message-ID: <20161021174020.GA29180@linux.intel.com> Reply-To: tim.c.chen@linux.intel.com References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.7.0 (2016-08-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1607 Lines: 43 On Fri, Oct 21, 2016 at 12:05:19PM +0200, Christian Borntraeger wrote: > On 10/21/2016 10:16 AM, Christian Borntraeger wrote: > > [ 308.206297] Call Trace: > > [ 308.206299] ([<000000000025d3ec>] __alloc_pages_nodemask+0x134/0xdf8) > > [ 308.206303] ([<0000000000280d6a>] kmalloc_order+0x42/0x70) > > [ 308.206305] ([<0000000000280dd8>] kmalloc_order_trace+0x40/0xf0) > > [ 308.206310] ([<00000000002a7090>] init_swap_address_space+0x68/0x138) > > [ 308.206312] ([<00000000002ac858>] SyS_swapon+0xbd0/0xf80) > > [ 308.206317] ([<0000000000785476>] system_call+0xd6/0x264) > > [ 308.206318] Last Breaking-Event-Address: > > [ 308.206319] [<000000000025db38>] __alloc_pages_nodemask+0x880/0xdf8 > > [ 308.206320] ---[ end trace aaeca736f47ac05b ]--- > > > > Looks like that 1TB of swap is just too big for your logic (you try kmalloc without checking the size). > Thanks for giving this patch series a spin. Let's use vzalloc instead. Can you try the following change. Thanks. Tim --->8--- diff --git a/mm/swap_state.c b/mm/swap_state.c index af4ed5f..0f84526 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -526,11 +526,9 @@ int init_swap_address_space(unsigned int type, unsigned long nr_pages) unsigned int i, nr; nr = DIV_ROUND_UP(nr_pages, SWAP_ADDRESS_SPACE_PAGES); - spaces = kzalloc(sizeof(struct address_space) * nr, GFP_KERNEL); + spaces = vzalloc(sizeof(struct address_space) * nr); if (!spaces) { - spaces = vzalloc(sizeof(struct address_space) * nr); - if (!spaces) - return -ENOMEM; + return -ENOMEM; } for (i = 0; i < nr; i++) { space = spaces + i;