From patchwork Tue Apr 26 08:59:53 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Young X-Patchwork-Id: 731982 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3Q8nT3f003148 for ; Tue, 26 Apr 2011 08:49:29 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752303Ab1DZItK (ORCPT ); Tue, 26 Apr 2011 04:49:10 -0400 Received: from mail-pz0-f46.google.com ([209.85.210.46]:48353 "EHLO mail-pz0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752081Ab1DZItJ (ORCPT ); Tue, 26 Apr 2011 04:49:09 -0400 Received: by pzk9 with SMTP id 9so143392pzk.19 for ; Tue, 26 Apr 2011 01:49:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:date:from:to:subject:message-id:mime-version :content-type:content-disposition:user-agent; bh=tRGNhlOVnXjuEU9miMMgNh7I7Nqcnu65zhc7bFv9YTQ=; b=n/E26OD+Tm9ZOM32yh5Tokbl0NcpYQEkghcp2/77i8oZeQJJqnXzBMdFT4Yd5KeFJb 7IkOsCVWbMHveixL0I7mNI0s/uHvXHfgzKGx8KeRHvaMaZY9zI/jshmxcFENZDPIFVxV H6htArVcm9zfoP7wsqiCLSaxuFfw/cQl0UPWY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:from:to:subject:message-id:mime-version:content-type :content-disposition:user-agent; b=RvGy6zHOv75bOYfLW2FRst0+l1KK0YkPADn9qg/VyyQ8ATSnviM6byvJPs4kx/xBiI doHD4ySq4DE+PYhRmTdITfO92hpnOeP6v+bxgi5OUtLkyJb0kEK709T77TvEbHFSUhwy XpHZJ5EWqWaYuiLsq+zslC9WFt3preRcRCKFA= Received: by 10.68.39.105 with SMTP id o9mr725640pbk.45.1303807748441; Tue, 26 Apr 2011 01:49:08 -0700 (PDT) Received: from localhost ([124.65.152.142]) by mx.google.com with ESMTPS id l7sm492641pbo.44.2011.04.26.01.49.03 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 26 Apr 2011 01:49:07 -0700 (PDT) Date: Tue, 26 Apr 2011 16:59:53 +0800 From: Dave Young To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, kosaki.motohiro@jp.fujitsu.com Subject: [PATCH v2] virtio_balloon: disable oom killer when fill balloon Message-ID: <20110426085953.GA12389@darkstar> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Tue, 26 Apr 2011 08:49:29 +0000 (UTC) When memory pressure is high, virtio ballooning will probably cause oom killing. Even if alloc_page with GFP_NORETRY itself does not directly trigger oom it will make memory becoming low then memory alloc of other processes will trigger oom killing. It is not desired behaviour. Here disable oom killer in fill_balloon to address this issue. Add code comment as KOSAKI Motohiro's suggestion. Signed-off-by: Dave Young --- drivers/virtio/virtio_balloon.c | 8 ++++++++ 1 file changed, 8 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --- linux-2.6.orig/drivers/virtio/virtio_balloon.c 2011-04-26 11:39:14.053118406 +0800 +++ linux-2.6/drivers/virtio/virtio_balloon.c 2011-04-26 16:54:56.419741542 +0800 @@ -25,6 +25,7 @@ #include #include #include +#include struct virtio_balloon { @@ -102,6 +103,12 @@ static void fill_balloon(struct virtio_b /* We can only do one array worth at a time. */ num = min(num, ARRAY_SIZE(vb->pfns)); + /* Disable oom killer for indirect oom due to our memory consuming + * Currently only hibernation code use oom_killer_disable, + * hibernation will freeze us before disable oom killer, so + * It's safe here without locks. + */ + oom_killer_disable(); for (vb->num_pfns = 0; vb->num_pfns < num; vb->num_pfns++) { struct page *page = alloc_page(GFP_HIGHUSER | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN); @@ -119,6 +126,7 @@ static void fill_balloon(struct virtio_b vb->num_pages++; list_add(&page->lru, &vb->pages); } + oom_killer_enable(); /* Didn't get any? Oh well. */ if (vb->num_pfns == 0)