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=-12.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 9FE71C433E4 for ; Fri, 21 Aug 2020 23:50:11 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6470A2076E for ; Fri, 21 Aug 2020 23:50:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="brdokWqO" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6470A2076E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 0F5468D008D; Fri, 21 Aug 2020 19:50:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0CB878D0008; Fri, 21 Aug 2020 19:50:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ED5C28D008D; Fri, 21 Aug 2020 19:50:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0020.hostedemail.com [216.40.44.20]) by kanga.kvack.org (Postfix) with ESMTP id D581A8D0008 for ; Fri, 21 Aug 2020 19:50:10 -0400 (EDT) Received: from smtpin06.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 9CC933638 for ; Fri, 21 Aug 2020 23:50:10 +0000 (UTC) X-FDA: 77176221780.06.fruit63_62173882703d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin06.hostedemail.com (Postfix) with ESMTP id 6EC1E100521B3 for ; Fri, 21 Aug 2020 23:50:10 +0000 (UTC) X-HE-Tag: fruit63_62173882703d X-Filterd-Recvd-Size: 6770 Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by imf33.hostedemail.com (Postfix) with ESMTP for ; Fri, 21 Aug 2020 23:50:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598053808; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qJMoESJi1CzsGXjZoMet0uu1x4mJs/R0x5g01SKUlC0=; b=brdokWqOn8BtHLpTFPIV+SiLikWyk5VuV15nl9jihsdifHe1O0/cVs3wETgO5MuEW30cQV 9SV5eUkoUxCmITb8Ydf81JuEchKAw8xd+MCNNkN9X497nQc5/fczaRswY3ifOyL05Nt7pn xpcrbW01mPYE3BedTN1S5DRjqgbQH7Y= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-313-2Bp01o6ZMR2Asrp_LnMjjQ-1; Fri, 21 Aug 2020 19:50:05 -0400 X-MC-Unique: 2Bp01o6ZMR2Asrp_LnMjjQ-1 Received: by mail-qk1-f198.google.com with SMTP id 1so2429683qki.22 for ; Fri, 21 Aug 2020 16:50:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qJMoESJi1CzsGXjZoMet0uu1x4mJs/R0x5g01SKUlC0=; b=tbx4WIEkLokqEC9C915FttqkWnmVcu7ncY0afGoZUqjTdRtdBPAPOdR8UySa/P51t7 2wYJOOjW2Rh9RoRRZ/hc+31bmyA3Ak4cf/haa0H92e8JbTttTuocbj2Rq2jrU046Fmla SnKzMZzufi6HIL/yl5a+JXR4CYEte6TqmQszevt6+iNhqIIOFxgJgAnUk+Jo+vVep8Tc b2EXiNTmKinXlk77hK422R8/zi3kKZN9/0pyv087SD3DY4eONmMdhT9+dO5yPYG+tkGk joZOidfdqpjDiQbeMz/PRPZxKDBNgh5Zw6de0X4x5zIXnMDhra1ruBNnTSOZ8ze+aP35 RlPw== X-Gm-Message-State: AOAM530NekIjjOFosNV33qhcyX0pgcVhl8UzKHspww7P+KAzj0HlV/ls DXjvRe1mO8apx7jg8P1oIiaBzwY3Zsr6Zo/YkiCQ/L0/Zmhh8Apg+xJxFigwhAHDEzG27NoPXRY uleCwEHHytcI= X-Received: by 2002:a37:bd46:: with SMTP id n67mr5209840qkf.190.1598053804361; Fri, 21 Aug 2020 16:50:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJym38019X0MXzuv14+yatNymJFgB7Qx8TRrssQJ+S40n02yV1nQKW5PQNvdNrKhPQZr5dzc8g== X-Received: by 2002:a37:bd46:: with SMTP id n67mr5209812qkf.190.1598053804062; Fri, 21 Aug 2020 16:50:04 -0700 (PDT) Received: from localhost.localdomain (bras-vprn-toroon474qw-lp130-11-70-53-122-15.dsl.bell.ca. [70.53.122.15]) by smtp.gmail.com with ESMTPSA id t69sm2821600qka.73.2020.08.21.16.50.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2020 16:50:03 -0700 (PDT) From: Peter Xu To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: "Maya B . Gokhale" , Linus Torvalds , Yang Shi , Marty Mcfadden , peterx@redhat.com, Kirill Shutemov , Oleg Nesterov , Jann Horn , Jan Kara , Kirill Tkhai , Andrea Arcangeli , Christoph Hellwig , Andrew Morton Subject: [PATCH 1/4] mm: Trial do_wp_page() simplification Date: Fri, 21 Aug 2020 19:49:55 -0400 Message-Id: <20200821234958.7896-2-peterx@redhat.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200821234958.7896-1-peterx@redhat.com> References: <20200821234958.7896-1-peterx@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=peterx@redhat.com X-Mimecast-Spam-Score: 0.0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 6EC1E100521B3 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam03 Content-Transfer-Encoding: quoted-printable 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: From: Linus Torvalds How about we just make sure we're the only possible valid user fo the page before we bother to reuse it? Simplify, simplify, simplify. And get rid of the nasty serialization on the page lock at the same time. Signed-off-by: Linus Torvalds [peterx: add subject prefix] Signed-off-by: Peter Xu --- mm/memory.c | 59 +++++++++++++++-------------------------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 602f4283122f..cb9006189d22 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2927,50 +2927,25 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf= ) * not dirty accountable. */ if (PageAnon(vmf->page)) { - int total_map_swapcount; - if (PageKsm(vmf->page) && (PageSwapCache(vmf->page) || - page_count(vmf->page) !=3D 1)) + struct page *page =3D vmf->page; + + /* PageKsm() doesn't necessarily raise the page refcount */ + if (PageKsm(page) || page_count(page) !=3D 1) + goto copy; + if (!trylock_page(page)) + goto copy; + if (PageKsm(page) || page_mapcount(page) !=3D 1 || page_count(page) !=3D= 1) { + unlock_page(page); goto copy; - if (!trylock_page(vmf->page)) { - get_page(vmf->page); - pte_unmap_unlock(vmf->pte, vmf->ptl); - lock_page(vmf->page); - vmf->pte =3D pte_offset_map_lock(vma->vm_mm, vmf->pmd, - vmf->address, &vmf->ptl); - if (!pte_same(*vmf->pte, vmf->orig_pte)) { - update_mmu_tlb(vma, vmf->address, vmf->pte); - unlock_page(vmf->page); - pte_unmap_unlock(vmf->pte, vmf->ptl); - put_page(vmf->page); - return 0; - } - put_page(vmf->page); - } - if (PageKsm(vmf->page)) { - bool reused =3D reuse_ksm_page(vmf->page, vmf->vma, - vmf->address); - unlock_page(vmf->page); - if (!reused) - goto copy; - wp_page_reuse(vmf); - return VM_FAULT_WRITE; - } - if (reuse_swap_page(vmf->page, &total_map_swapcount)) { - if (total_map_swapcount =3D=3D 1) { - /* - * The page is all ours. Move it to - * our anon_vma so the rmap code will - * not search our parent or siblings. - * Protected against the rmap code by - * the page lock. - */ - page_move_anon_rmap(vmf->page, vma); - } - unlock_page(vmf->page); - wp_page_reuse(vmf); - return VM_FAULT_WRITE; } - unlock_page(vmf->page); + /* + * Ok, we've got the only map reference, and the only + * page count reference, and the page is locked, + * it's dark out, and we're wearing sunglasses. Hit it. + */ + wp_page_reuse(vmf); + unlock_page(page); + return VM_FAULT_WRITE; } else if (unlikely((vma->vm_flags & (VM_WRITE|VM_SHARED)) =3D=3D (VM_WRITE|VM_SHARED))) { return wp_page_shared(vmf); --=20 2.26.2