From patchwork Wed May 30 01:50:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hugh Dickins X-Patchwork-Id: 10437491 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 40FEA602BF for ; Wed, 30 May 2018 01:50:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 311FD287B8 for ; Wed, 30 May 2018 01:50:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 22609287C2; Wed, 30 May 2018 01:50:40 +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=-10.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, USER_IN_DEF_DKIM_WL 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 024FE287B8 for ; Wed, 30 May 2018 01:50:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EC1096B0003; Tue, 29 May 2018 21:50:37 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E6FC36B0005; Tue, 29 May 2018 21:50:37 -0400 (EDT) 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 D5E4E6B0007; Tue, 29 May 2018 21:50:37 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf0-f197.google.com (mail-pf0-f197.google.com [209.85.192.197]) by kanga.kvack.org (Postfix) with ESMTP id 91F936B0003 for ; Tue, 29 May 2018 21:50:37 -0400 (EDT) Received: by mail-pf0-f197.google.com with SMTP id q15-v6so9983678pff.17 for ; Tue, 29 May 2018 18:50:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:date:from:to:cc:subject :message-id:user-agent:mime-version; bh=rk6L67amihLasV7Rgdo4882G4UKqGuhDiwGTfBOscvU=; b=Sc6mZIV1Bo7kEjNKUzF9wDQ2rCSFFCDBVxS4roaEoS8JhzKMnCdK1NINq3g8YiFogW 8Z87m2NozF6/skV4B9Af6fKG7VM5s8poS4nHvwu7hbYuhmoDgyn+ZWGzZtF0JjXJE3rH ByiYJpTTxTIhpipMe1Q0aCYkdbwtOkHM7jH6nTNIPWHhAPTpYCeLut9ZtX1G+sVDIoDp 2nGwQEqY2vZpxWiigcS/HWSmgDWoTv/MrCHA4kZixcfJiNi+PnF4QLQdyzncv2EwdtZ3 DlxiEmJwPDtbD+Gu/q76yJY6wrQhszFotTa+bxghEinKUdGODHW+2f6WQ52xUazhuIP2 j3rA== X-Gm-Message-State: ALKqPwdYj3mthXbBSQBJUjsA2xWeH9SQtPfWCTq6narBhayjAH1eHzJx ouPAEgHtxYu2LkebCEhQnkrg08xMtPJOqAlo9NZRpQMg6+XdRz3VQqTexgOzVMOUcLf8HwQZkfi a1WCcUPz6LGw8j0il7zH7w32bDT03KjpLLzwrYAvhiHWPKcB4GmKIID2EtZpR3fgFWL0E9T4JxF 8Z6MHEP6CRnJFDTvUDao4IkzIks3OXbeykTvR7b+2J6T5a4QOVuzap0gB4QJgDaTUrUFGXVtEir lEasmboPi/MpYpdAdbKW/eKWKefM8x6AIunJnM+WJpeHrYgpcuBTJxy6TcY3QGmCRWVxI7T2pfZ ZXv7NHl2QOqsU36ld+Ba9U1+21AVkujAEMWeBP9CpspFspNqsJhqsQmLkw1FwGzWn/C6PGrZWYg W X-Received: by 2002:a17:902:704c:: with SMTP id h12-v6mr800696plt.269.1527645037265; Tue, 29 May 2018 18:50:37 -0700 (PDT) X-Received: by 2002:a17:902:704c:: with SMTP id h12-v6mr800657plt.269.1527645036567; Tue, 29 May 2018 18:50:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527645036; cv=none; d=google.com; s=arc-20160816; b=TXR9vhR6TbEBs+xQoW9l/BzUF+EK1RmG9QADD5VPgMfHw1AWlB05zwl+yHuJn8gER2 HO+wNspoX/V4B2pwo4ZK6O/7fSN85HIBunqHlLj6Ak0fIamROa9rieDoXy1wkZ9Wpowr 3cCucncGV747frauvYPc8t6gwKpnIXY61SfjCHbr35E9df6CtchXbaECJ1oRMwnBZXA4 n/+7JSfwdssDEyXf24PDLPrTrtd4W5lt1s5aSQI5ouh6TEDqLG0LYJcv5ZFGXEi+pSyC IRRWbZ8y0bkRhZb5IOiqjaN4fQrOUtYO3m+CBQmWsaCOGnhTP9WeXcrjYsFOM1y/2vH2 qOFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:message-id:subject:cc:to:from:date :dkim-signature:arc-authentication-results; bh=rk6L67amihLasV7Rgdo4882G4UKqGuhDiwGTfBOscvU=; b=bvJPFAuagqi94kSBrDTp/EHm/11wvuuPvKG9fPlOXVWyRFKkiyxNYcOWWl/BUWLcNd rJeoDLy8MPqGxV6zjL4X4wI08HdSGwJXLKhQmd2XAl90ihEk36jM9NvHyN9IhhlfP7mb gAKxVtFmRan9QYA5gkNzP4yh/ujL4GYPAlXxefrQ39f0C8JrGaDWoRpJckknSDgwpBaq NFa9XtGzkh7yR8tn57anmuEFMX1LqNKvehW/jP7oEhNmVjTlYCooKSdragMySj9mg1ca RwwfXwHxgEM2iYeZBhrqFhwq0mzN50rU35N/QCgDLl2NyQ4efvxwq79Qe3xoE5gqS1pq Kz5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=bLaXBBg8; spf=pass (google.com: domain of hughd@google.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=hughd@google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id 8-v6sor12233502pfa.103.2018.05.29.18.50.36 for (Google Transport Security); Tue, 29 May 2018 18:50:36 -0700 (PDT) Received-SPF: pass (google.com: domain of hughd@google.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=bLaXBBg8; spf=pass (google.com: domain of hughd@google.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=hughd@google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:user-agent:mime-version; bh=rk6L67amihLasV7Rgdo4882G4UKqGuhDiwGTfBOscvU=; b=bLaXBBg8UQ8O14lMJwwdClS5O3Ronkg9wjJMEgMKq6nTU9InGuR/UkCddeTyJSiP7n qf1wPl/hVZ6SNz3ApNE2sqA6uKrAy5BVObtEN5np7Yx2BDc1pOUIIenfWwDPk4Xq4NoN WFC/6q4omx2O3lLPbdzARcBrcUZOUuOxpADLjPBS3GG6iZlqXzzFrKhq/qYTNsGLGxp4 PbIk7sP7YRf/Hm+PWGfvPVkCMsy+GNFFOl49QRducmzkm9AvIA/ZC/6usMrML3fVK1Vl 7fD3q3YxEfKGK3ldZ9JvFLt67UR/ti8sGRgXgAnkhSUIKBA33dSbk6iYhko22ByTMO+/ PIuQ== X-Google-Smtp-Source: ADUXVKJSEFcHcw/Vi9xwa5JTvYT8VdJPPgGgjdig9QheH3Ocap2fN5fwyeyMOsHlZ0DzON1rbax9Dg== X-Received: by 2002:a62:3f4f:: with SMTP id m76-v6mr797923pfa.109.1527645035363; Tue, 29 May 2018 18:50:35 -0700 (PDT) Received: from [100.112.72.59] ([104.133.9.107]) by smtp.gmail.com with ESMTPSA id a23-v6sm14093953pgd.85.2018.05.29.18.50.34 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 29 May 2018 18:50:34 -0700 (PDT) Date: Tue, 29 May 2018 18:50:22 -0700 (PDT) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Andrew Morton cc: Konstantin Khlebnikov , "Kirill A. Shutemov" , Nicholas Piggin , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH] mm/huge_memory.c: __split_huge_page() use atomic ClearPageDirty() Message-ID: User-Agent: Alpine 2.11 (LSU 23 2013-08-11) 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 Swapping load on huge=always tmpfs (with khugepaged tuned up to be very eager, but I'm not sure that is relevant) soon hung uninterruptibly, waiting for page lock in shmem_getpage_gfp()'s find_lock_entry(), most often when "cp -a" was trying to write to a smallish file. Debug showed that the page in question was not locked, and page->mapping NULL by now, but page->index consistent with having been in a huge page before. Reproduced in minutes on a 4.15 kernel, even with 4.17's 605ca5ede764 ("mm/huge_memory.c: reorder operations in __split_huge_page_tail()") added in; but took hours to reproduce on a 4.17 kernel (no idea why). The culprit proved to be the __ClearPageDirty() on tails beyond i_size in __split_huge_page(): the non-atomic __bitoperation may have been safe when 4.8's baa355fd3314 ("thp: file pages support for split_huge_page()") introduced it, but liable to erase PageWaiters after 4.10's 62906027091f ("mm: add PageWaiters indicating tasks are waiting for a page bit"). Fixes: 62906027091f ("mm: add PageWaiters indicating tasks are waiting for a page bit") Signed-off-by: Hugh Dickins Acked-by: Kirill A. Shutemov --- It's not a 4.17-rc regression that this fixes, so no great need to slip this into 4.17 at the last moment - though it makes a good companion to Konstantin's 605ca5ede764. I think they both should go to stable, but since Konstantin's already went into rc1 without that tag, we shall have to recommend Konstantin's to GregKH out-of-band. mm/huge_memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- 4.17-rc7/mm/huge_memory.c 2018-04-26 10:48:36.019288258 -0700 +++ linux/mm/huge_memory.c 2018-05-29 18:14:52.095512715 -0700 @@ -2431,7 +2431,7 @@ static void __split_huge_page(struct pag __split_huge_page_tail(head, i, lruvec, list); /* Some pages can be beyond i_size: drop them from page cache */ if (head[i].index >= end) { - __ClearPageDirty(head + i); + ClearPageDirty(head + i); __delete_from_page_cache(head + i, NULL); if (IS_ENABLED(CONFIG_SHMEM) && PageSwapBacked(head)) shmem_uncharge(head->mapping->host, 1);