memory-hotplug: don't BUG() in register_memory_resource()

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.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Tang Chen <tangchen@cn.fujitsu.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Sheng Yong <shengyong1@huawei.com>
Cc: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Vitaly Kuznetsov 2016-01-14 15:21:55 -08:00 committed by Linus Torvalds
parent 3e89e1c5ea
commit 6f754ba4cf
1 changed files with 5 additions and 4 deletions

View File

@ -131,7 +131,8 @@ static struct resource *register_memory_resource(u64 start, u64 size)
{ {
struct resource *res; struct resource *res;
res = kzalloc(sizeof(struct resource), GFP_KERNEL); res = kzalloc(sizeof(struct resource), GFP_KERNEL);
BUG_ON(!res); if (!res)
return ERR_PTR(-ENOMEM);
res->name = "System RAM"; res->name = "System RAM";
res->start = start; res->start = start;
@ -140,7 +141,7 @@ static struct resource *register_memory_resource(u64 start, u64 size)
if (request_resource(&iomem_resource, res) < 0) { if (request_resource(&iomem_resource, res) < 0) {
pr_debug("System RAM resource %pR cannot be added\n", res); pr_debug("System RAM resource %pR cannot be added\n", res);
kfree(res); kfree(res);
res = NULL; return ERR_PTR(-EEXIST);
} }
return res; return res;
} }
@ -1312,8 +1313,8 @@ int __ref add_memory(int nid, u64 start, u64 size)
int ret; int ret;
res = register_memory_resource(start, size); res = register_memory_resource(start, size);
if (!res) if (IS_ERR(res))
return -EEXIST; return PTR_ERR(res);
ret = add_memory_resource(nid, res); ret = add_memory_resource(nid, res);
if (ret < 0) if (ret < 0)