From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB466C433E2 for ; Tue, 1 Sep 2020 15:39:15 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 97AA320866 for ; Tue, 1 Sep 2020 15:39:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="i/8U9ZP+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 97AA320866 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 2B84D900002; Tue, 1 Sep 2020 11:39:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 269726B0072; Tue, 1 Sep 2020 11:39:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 17EE5900002; Tue, 1 Sep 2020 11:39:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0063.hostedemail.com [216.40.44.63]) by kanga.kvack.org (Postfix) with ESMTP id 0290C6B0071 for ; Tue, 1 Sep 2020 11:39:14 -0400 (EDT) Received: from smtpin27.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id A041B362E for ; Tue, 1 Sep 2020 15:39:14 +0000 (UTC) X-FDA: 77214901428.27.blade87_3b0118327099 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin27.hostedemail.com (Postfix) with ESMTP id 644D63D668 for ; Tue, 1 Sep 2020 15:39:14 +0000 (UTC) X-HE-Tag: blade87_3b0118327099 X-Filterd-Recvd-Size: 5107 Received: from mail-ej1-f68.google.com (mail-ej1-f68.google.com [209.85.218.68]) by imf47.hostedemail.com (Postfix) with ESMTP for ; Tue, 1 Sep 2020 15:39:13 +0000 (UTC) Received: by mail-ej1-f68.google.com with SMTP id i22so2308423eja.5 for ; Tue, 01 Sep 2020 08:39:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=6PG5SiNwVZVH2pkgJv+IFK7tt0WCjvP76ZbFGjJc07s=; b=i/8U9ZP+xxv0b1D3KLACprbO6f9XSdui6Bpc8qWHCAGjJKdf6SV/BwLJGyCkNI3w8z utwAKrw3BY6mIzso/yYfFuWfGTECQ7+S2GJJglSWnuRG1i7Bp7IEakBk2lI8ydIqqedT v9oYslNVOGXacY4YbhO1cqsCwlEYrOZUV0biEgmGK1TKRp95SDA12NtKfAwlcUMe93ud dHZS9fZM0xCRZnZQ5JOyObYV58dweBq4qelLd7pQ0t8xe9+RE9neWOy4ZWoYf9TCf50V L8Wrp+SBtYeR3Pq0uEVbTaRF4pyNXDottPB0Ao1kbMW2rgURZ9yPc+nvFWeuJ8jxGVRD S2zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=6PG5SiNwVZVH2pkgJv+IFK7tt0WCjvP76ZbFGjJc07s=; b=oVQVFD7nbWSd5O4AyFCTB7YnwtO+2YVQeVkB+UpuM3Py32QKIIAGj0YMMlPZiM7bjT Lk+xtJlqpz/Y/8CAQkyNyYhTcLs8DvlGib+rbGFZmOjR/tdtkJ3Cuqwn4oMeAZeuTq87 i98zrwy5qGU6EhsyHvRgd6VmpvvqqT3RL/wlhpelFX18NV+MpTDNmh0e094gUySDkOji NYjBIoO71/LotV+1l0qDNXWGj6MbNBIAAlteDc6+AXWj5s9mGoaKDyDOCKaiLaL9PFE9 0+opoODmNQvAoqO49fY7pErACJUD2Po7apUZlzv4/He8x+m6jujqq3lxtP+WbcFVr9qz QZ4w== X-Gm-Message-State: AOAM531vAHKGG4IZbC5vJtinKWNVNn1wZHqn9YlELsHXxHM0Ip8WiFNJ 6z/nxIKNvULkv+l6tzV7MKUgP0DHuCAUYzGyyZw= X-Google-Smtp-Source: ABdhPJy3CwrJ6zEga+umlT+PQ35ecu20mv5XP4qIonGiniaxceoYl6LbA+wYSR0qjjmWEQ8IBfCfFcdjm5xcXMm/KK8= X-Received: by 2002:a17:907:2173:: with SMTP id rl19mr1935562ejb.514.1598974752908; Tue, 01 Sep 2020 08:39:12 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Yang Shi Date: Tue, 1 Sep 2020 08:39:00 -0700 Message-ID: Subject: Re: [PATCH 3/5] shmem: shmem_writepage() split unlikely i915 THP To: Hugh Dickins Cc: Andrew Morton , Alex Shi , Johannes Weiner , Michal Hocko , Mike Kravetz , Shakeel Butt , Matthew Wilcox , Qian Cai , Chris Wilson , Kuo-Hsin Yang , Linux Kernel Mailing List , Linux MM Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 644D63D668 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam05 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: On Sun, Aug 30, 2020 at 2:04 PM Hugh Dickins wrote: > > drivers/gpu/drm/i915/gem/i915_gem_shmem.c contains a shmem_writeback() > which calls shmem_writepage() from a shrinker: that usually works well > enough; but if /sys/kernel/mm/transparent_hugepage/shmem_enabled has > been set to "force" (documented as "Force the huge option on for all - > very useful for testing"), shmem_writepage() is surprised to be called > with a huge page, and crashes on the VM_BUG_ON_PAGE(PageCompound) (I > did not find out where the crash happens when CONFIG_DEBUG_VM is off). > > LRU page reclaim always splits the shmem huge page first: I'd prefer not > to demand that of i915, so check and split compound in shmem_writepage(). > > Fixes: 2d6692e642e7 ("drm/i915: Start writeback from the shrinker") > Signed-off-by: Hugh Dickins > Cc: stable@vger.kernel.org # v5.3+ > --- > I've marked this for stable just for the info, but the number of users > affected is very probably 1, so please feel free to delete that marking. > > mm/shmem.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > --- 5.9-rc2/mm/shmem.c 2020-08-16 17:32:50.693507198 -0700 > +++ linux/mm/shmem.c 2020-08-28 17:35:08.326024349 -0700 > @@ -1362,7 +1362,15 @@ static int shmem_writepage(struct page * > swp_entry_t swap; > pgoff_t index; > > - VM_BUG_ON_PAGE(PageCompound(page), page); > + /* > + * If /sys/kernel/mm/transparent_hugepage/shmem_enabled is "force", > + * then drivers/gpu/drm/i915/gem/i915_gem_shmem.c gets huge pages, > + * and its shmem_writeback() needs them to be split when swapping. > + */ > + if (PageTransCompound(page)) > + if (split_huge_page(page) < 0) > + goto redirty; The change looks good to me. Acked-by: Yang Shi Just a nit: it may be better to move the spilte after the !PageLocked assertion? Split needs page locked too. > + > BUG_ON(!PageLocked(page)); > mapping = page->mapping; > index = page->index; >