From patchwork Tue Nov 20 13:43:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Hocko X-Patchwork-Id: 10690403 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9E4BE1709 for ; Tue, 20 Nov 2018 13:43:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8D94226E97 for ; Tue, 20 Nov 2018 13:43:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 81B2F26222; Tue, 20 Nov 2018 13:43:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0735826222 for ; Tue, 20 Nov 2018 13:43:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 062EC6B203E; Tue, 20 Nov 2018 08:43:40 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id EB20D6B203F; Tue, 20 Nov 2018 08:43:39 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C190F6B2040; Tue, 20 Nov 2018 08:43:39 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by kanga.kvack.org (Postfix) with ESMTP id 56A996B203E for ; Tue, 20 Nov 2018 08:43:39 -0500 (EST) Received: by mail-ed1-f69.google.com with SMTP id w15so1282167edl.21 for ; Tue, 20 Nov 2018 05:43:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Fk6j1qjZGqSUR1ucZm8jmR3zRWMJFCwmZwWK+RSH3Lk=; b=CTHpUAU4TTHCmzdHVugDi5iOFXGCLPDILnYAjLGT2z3twdd0ngy8NOryxmrkgLjJ0U GiM55GPkW0P2Pnr46TTQPnn1X30/ePCLQRQAWOyKu+uXGQ5IZnMUWEFT/51pXxVyle4F ue30LLMdzFOMH1/jmcbfNQ9c20eO+5IbkWQFDhw/Ssrowdy76KSRQj4CfHNFDJucgJ86 fC6NL+JKAFQr8i9GCumyaFbmT5b/HDwcUjIYsT/9w7Nt0PjFcjYcBamQ5/5Z0DZe3/qr yw1n+i5PPrNbd2ymaOPmV7AYktU+75nhLYfcPICzGp+9ohH5T7MsCn70QVAG0mDGHWca uXlQ== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of mstsxfx@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org X-Gm-Message-State: AGRZ1gIHZzGh5xvPwaqlau7puXn7qnX3HyWf6NTpTYMXE5nGFGtVxBDl znNHs1V7cD2jy59/J2pArIKwcE/iZ3KMKcEvmT6KLWoQNbJxj035jL9VZUnZKafItG89lX4IYz6 tmpPWkeh6p1ArxQivw0QSnwIsPSpqE6jagFe++gNUv9wP7NWNwe9z7ONLCT4wQ398N1VNZ9LWzE CvmCiCr2koGpO/7kzN5asj2VCdd29vwhka3VCYXdbVQjhnaBV/mAp3bo/1slS6BCVUmucwh8+Mh yPo4bmo7IniJNIXOshsLsj3yhIjF8SwlTDtDHcRZuHcNiB2Jc3KJlohkkGjKJ7hT1+Zk4HfNWt5 +CuqLLIDttMRHRZ8MAzIyI1AcV1G5Zm7gzo2SmHxmy1tMmvWQIO+jy5Kw68dQGfhFcFBguonEw= = X-Received: by 2002:a17:906:1c86:: with SMTP id g6-v6mr1938382ejh.195.1542721418844; Tue, 20 Nov 2018 05:43:38 -0800 (PST) X-Received: by 2002:a17:906:1c86:: with SMTP id g6-v6mr1938343ejh.195.1542721417808; Tue, 20 Nov 2018 05:43:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542721417; cv=none; d=google.com; s=arc-20160816; b=iM1FUgL18z7wU8tQEw/zSaaHgElPknjS45kUwpRzoLoDQEh0PbV3ZOHL6pKHZYJHcj x0e6PGJQhFtfu2gXdu/ssyap8Tyl5Vhw66w+WeWXggupmfwtSajQYyAs+3G4kx15giWN XbuH3hmaoNnWPd6S5jq+O2p5h3Vai1xFVGINhMlp3nVRQXXYAdGQ3pVwLb9QVj80NpcJ NA49aTnD0GB+XbrtxPMy+3YkttwXYv7a1hgpGtUi9+GqbJYy94VCXhR65CI8yNjDryDa /F+MxJzdt0IX8wwJRQxUI+nmyncadBc0FITtQFJ5oSo/hgKh9smAu6gDCyNmQQfrPrdF QHJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=Fk6j1qjZGqSUR1ucZm8jmR3zRWMJFCwmZwWK+RSH3Lk=; b=xPswOB0GVck2kCihLzin3SlpXLE2iZHNUSpn+mRW3lmm4IhWxAKuXW61i6bfwfbIgQ gX0uOwkaho9odIGpXZiZikIG+lBqx4iCjArwJ97FbP2S5fqhlQNr6/TErd0J1cHvVGTj scyZ5VYEye/15hgHy0Y3igrzFXrl5OU3ajN1GmDw41fEHvoAlIyGjBrQwxjfr1GFn7iB /VfkEbsLEbx6mBhcydHV9rJIAh/ay+MzgEHgy271ltmipZRD2hDziT9u2yjwYwPkregE 02WQxVcWn2mg7RA5r8tISffGinQ7dbcZIWLfnxgWVegtmXGdu1xZdRbUrN0+j1TZoYJI 279A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of mstsxfx@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id p16-v6sor21836215eds.29.2018.11.20.05.43.37 for (Google Transport Security); Tue, 20 Nov 2018 05:43:37 -0800 (PST) Received-SPF: pass (google.com: domain of mstsxfx@gmail.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; spf=pass (google.com: domain of mstsxfx@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=mstsxfx@gmail.com; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org X-Google-Smtp-Source: AFSGD/V88S+hp74RyOZiVbXiGkCC3tC4E36Kd6sMvYipIRhe1zFoyL3SLdmM9ZVuyhkZxyHOOZp7Kw== X-Received: by 2002:a50:9226:: with SMTP id i35mr2392413eda.8.1542721417077; Tue, 20 Nov 2018 05:43:37 -0800 (PST) Received: from tiehlicka.suse.cz (prg-ext-pat.suse.com. [213.151.95.130]) by smtp.gmail.com with ESMTPSA id 49sm8428786edz.59.2018.11.20.05.43.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 20 Nov 2018 05:43:36 -0800 (PST) From: Michal Hocko To: Cc: Andrew Morton , Oscar Salvador , Pavel Tatashin , David Hildenbrand , LKML , Michal Hocko Subject: [RFC PATCH 2/3] mm, memory_hotplug: deobfuscate migration part of offlining Date: Tue, 20 Nov 2018 14:43:22 +0100 Message-Id: <20181120134323.13007-3-mhocko@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181120134323.13007-1-mhocko@kernel.org> References: <20181120134323.13007-1-mhocko@kernel.org> MIME-Version: 1.0 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Michal Hocko Memory migration might fail during offlining and we keep retrying in that case. This is currently obfuscate by goto retry loop. The code is hard to follow and as a result it is even suboptimal becase each retry round scans the full range from start_pfn even though we have successfully scanned/migrated [start_pfn, pfn] range already. This is all only because check_pages_isolated failure has to rescan the full range again. De-obfuscate the migration retry loop by promoting it to a real for loop. In fact remove the goto altogether by making it a proper double loop (yeah, gotos are nasty in this specific case). In the end we will get a slightly more optimal code which is better readable. Signed-off-by: Michal Hocko Reviewed-by: David Hildenbrand Reviewed-by: Oscar Salvador --- mm/memory_hotplug.c | 60 +++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 6263c8cd4491..9cd161db3061 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1591,38 +1591,40 @@ static int __ref __offline_pages(unsigned long start_pfn, goto failed_removal_isolated; } - pfn = start_pfn; -repeat: - /* start memory hot removal */ - ret = -EINTR; - if (signal_pending(current)) { - reason = "signal backoff"; - goto failed_removal_isolated; - } + do { + for (pfn = start_pfn; pfn;) + { + /* start memory hot removal */ + ret = -EINTR; + if (signal_pending(current)) { + reason = "signal backoff"; + goto failed_removal_isolated; + } - cond_resched(); - lru_add_drain_all(); - drain_all_pages(zone); + cond_resched(); + lru_add_drain_all(); + drain_all_pages(zone); - pfn = scan_movable_pages(start_pfn, end_pfn); - if (pfn) { /* We have movable pages */ - ret = do_migrate_range(pfn, end_pfn); - goto repeat; - } + pfn = scan_movable_pages(pfn, end_pfn); + if (pfn) { + /* TODO fatal migration failures should bail out */ + do_migrate_range(pfn, end_pfn); + } + } + + /* + * dissolve free hugepages in the memory block before doing offlining + * actually in order to make hugetlbfs's object counting consistent. + */ + ret = dissolve_free_huge_pages(start_pfn, end_pfn); + if (ret) { + reason = "failure to dissolve huge pages"; + goto failed_removal_isolated; + } + /* check again */ + offlined_pages = check_pages_isolated(start_pfn, end_pfn); + } while (offlined_pages < 0); - /* - * dissolve free hugepages in the memory block before doing offlining - * actually in order to make hugetlbfs's object counting consistent. - */ - ret = dissolve_free_huge_pages(start_pfn, end_pfn); - if (ret) { - reason = "failure to dissolve huge pages"; - goto failed_removal_isolated; - } - /* check again */ - offlined_pages = check_pages_isolated(start_pfn, end_pfn); - if (offlined_pages < 0) - goto repeat; pr_info("Offlined Pages %ld\n", offlined_pages); /* Ok, all of our target is isolated. We cannot do rollback at this point. */