From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752210AbbLROua (ORCPT ); Fri, 18 Dec 2015 09:50:30 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49944 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751700AbbLROu3 (ORCPT ); Fri, 18 Dec 2015 09:50:29 -0500 From: Vitaly Kuznetsov To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Andrew Morton , Tang Chen , Naoya Horiguchi , Xishi Qiu , Sheng Yong , David Rientjes , Zhu Guihua , Dan Williams , David Vrabel , Igor Mammedov Subject: [PATCH] memory-hotplug: don't BUG() in register_memory_resource() Date: Fri, 18 Dec 2015 15:50:24 +0100 Message-Id: <1450450224-18515-1-git-send-email-vkuznets@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Out of memory condition is not a bug and while we can't add new memory in such case crashing the system seems wrong. Propagating the return value from register_memory_resource() requires interface change. Cc: Andrew Morton Cc: Tang Chen Cc: Naoya Horiguchi Cc: Xishi Qiu Cc: Sheng Yong Cc: David Rientjes Cc: Zhu Guihua Cc: Dan Williams Cc: David Vrabel Cc: Igor Mammedov Signed-off-by: Vitaly Kuznetsov --- mm/memory_hotplug.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 67d488a..9392f01 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -127,11 +127,13 @@ void mem_hotplug_done(void) } /* add this memory to iomem resource */ -static struct resource *register_memory_resource(u64 start, u64 size) +static int register_memory_resource(u64 start, u64 size, + struct resource **resource) { struct resource *res; res = kzalloc(sizeof(struct resource), GFP_KERNEL); - BUG_ON(!res); + if (!res) + return -ENOMEM; res->name = "System RAM"; res->start = start; @@ -140,9 +142,10 @@ static struct resource *register_memory_resource(u64 start, u64 size) if (request_resource(&iomem_resource, res) < 0) { pr_debug("System RAM resource %pR cannot be added\n", res); kfree(res); - res = NULL; + return -EEXIST; } - return res; + *resource = res; + return 0; } static void release_memory_resource(struct resource *res) @@ -1311,9 +1314,9 @@ int __ref add_memory(int nid, u64 start, u64 size) struct resource *res; int ret; - res = register_memory_resource(start, size); - if (!res) - return -EEXIST; + ret = register_memory_resource(start, size, &res); + if (ret) + return ret; ret = add_memory_resource(nid, res); if (ret < 0) -- 2.4.3