From patchwork Wed Sep 1 20:56:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 12470315 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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 DFFB8C43214 for ; Wed, 1 Sep 2021 20:56:31 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 74F3A6102A for ; Wed, 1 Sep 2021 20:56:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 74F3A6102A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 0BFCB8D0001; Wed, 1 Sep 2021 16:56:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 06F54900002; Wed, 1 Sep 2021 16:56:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E2C188D0003; Wed, 1 Sep 2021 16:56:30 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0238.hostedemail.com [216.40.44.238]) by kanga.kvack.org (Postfix) with ESMTP id D17D78D0001 for ; Wed, 1 Sep 2021 16:56:30 -0400 (EDT) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 88BA08249980 for ; Wed, 1 Sep 2021 20:56:30 +0000 (UTC) X-FDA: 78540212940.10.FF8D86A Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by imf02.hostedemail.com (Postfix) with ESMTP id 33BBC7001A08 for ; Wed, 1 Sep 2021 20:56:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1630529789; 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=uUFjqTEK/Z5AKo1Agn+ijWYpHJREXXiYmYHdAc5BzAA=; b=JdUwMn5M+++y/r/8dj28OA75MXlmH1Sg8d0pNPmELyYsqrOdEmR0mWTx/o3b4SGofCrZ1Q oimfxjzQHJnI7ehT99KZA+YbI9NBY9htG+lNSOSYVRDoGhTGF056JJABxXIQIwrZizc5+G cP8qf+YAQXbMZcxiuOYLJDeUHlQlbSA= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-227-KyLw8rUhPsKxWgb94PD4pg-1; Wed, 01 Sep 2021 16:56:28 -0400 X-MC-Unique: KyLw8rUhPsKxWgb94PD4pg-1 Received: by mail-qt1-f199.google.com with SMTP id m6-20020ac807c6000000b0029994381c5fso896683qth.5 for ; Wed, 01 Sep 2021 13:56:28 -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=uUFjqTEK/Z5AKo1Agn+ijWYpHJREXXiYmYHdAc5BzAA=; b=unG6/y74oEyEEZSwWF0BPgGw7/HULgYUmMiNhr1S+mUE6Iz10BpwrnY8uaj6FKL+NF WieKv0LYV87jmcvt+yx61AYReWZCIOYaE4AGfU9cbjp7DIVd8rHwzCM65SiirUEOroES nJkF3ekijrX8yKHWvy56XLFgmSgbyDyay13+CTfxQ4F0X/QOZGbN3In+ixKWHKiunzkN fbTQcWYzoHcuBBCw+sVNfh9jxplziTVtYU4qFP2FUF8HWBAWxu0KrxzluzUTxy+jhQ5R +FuNgcX1BkVUp6DVuicVwrpQAb4/puPt3Z8qwNI/0MZBgdp4EZwnDH9UP7o7cNxy5jjN 1znw== X-Gm-Message-State: AOAM533efR29vEYoSjQJnBGapSDRsv0eWxK+y31+XRVlz+TBqnnqn6T3 hIwt18AGYnSGOKN+N46saMEQoWs2EjANYLRTR2oivlBaoG5eAzgnVCCMD0CL1A8jzIyuKXZQiaR d3NJDxHUm1hY= X-Received: by 2002:a37:741:: with SMTP id 62mr1642009qkh.490.1630529788065; Wed, 01 Sep 2021 13:56:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyg27bfuu/yWSrJR+ACgldtYrxoQNg/w2ohixTNUzohW/oZaLbtRecN5m3ghvaicA92Bsp6WQ== X-Received: by 2002:a37:741:: with SMTP id 62mr1641988qkh.490.1630529787864; Wed, 01 Sep 2021 13:56:27 -0700 (PDT) Received: from t490s.redhat.com ([2607:fea8:56a3:500::ad7f]) by smtp.gmail.com with ESMTPSA id f3sm624865qti.65.2021.09.01.13.56.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Sep 2021 13:56:27 -0700 (PDT) From: Peter Xu To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Andrea Arcangeli , Mike Rapoport , peterx@redhat.com, Jerome Glisse , Alistair Popple , Yang Shi , Andrew Morton , David Hildenbrand , Miaohe Lin , "Kirill A . Shutemov" , Matthew Wilcox , Hugh Dickins , Axel Rasmussen Subject: [PATCH 1/5] mm/shmem: Unconditionally set pte dirty in mfill_atomic_install_pte Date: Wed, 1 Sep 2021 16:56:18 -0400 Message-Id: <20210901205622.6935-2-peterx@redhat.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210901205622.6935-1-peterx@redhat.com> References: <20210901205622.6935-1-peterx@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JdUwMn5M; spf=none (imf02.hostedemail.com: domain of peterx@redhat.com has no SPF policy when checking 216.205.24.124) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Stat-Signature: r94j3axyc68thsnohmu7mrqc7z11u3ge X-Rspamd-Queue-Id: 33BBC7001A08 X-Rspamd-Server: rspam04 X-HE-Tag: 1630529790-878931 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: It was conditionally done previously, as there's one shmem special case that we use SetPageDirty() instead. However that's not necessary and it should be easier and cleaner to do it unconditionally in mfill_atomic_install_pte(). The most recent discussion about this is here, where Hugh explained the history of SetPageDirty() and why it's possible that it's not required at all: https://lore.kernel.org/lkml/alpine.LSU.2.11.2104121657050.1097@eggly.anvils/ Currently mfill_atomic_install_pte() has three callers: 1. shmem_mfill_atomic_pte 2. mcopy_atomic_pte 3. mcontinue_atomic_pte After the change: case (1) should have its SetPageDirty replaced by the dirty bit on pte (so we unify them together, finally), case (2) should have no functional change at all as it has page_in_cache==false, case (3) may add a dirty bit to the pte. However since case (3) is UFFDIO_CONTINUE for shmem, it's merely 100% sure the page is dirty after all, so should not make a real difference either. This should make it much easier to follow on which case will set dirty for uffd, as we'll simply set it all now for all uffd related ioctls. Meanwhile, no special handling of SetPageDirty() if there's no need. Cc: Hugh Dickins Cc: Axel Rasmussen Cc: Andrea Arcangeli Signed-off-by: Peter Xu Reviewed-by: Axel Rasmussen --- mm/shmem.c | 1 - mm/userfaultfd.c | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index dacda7463d54..3f91c8ce4d02 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2437,7 +2437,6 @@ int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, shmem_recalc_inode(inode); spin_unlock_irq(&info->lock); - SetPageDirty(page); unlock_page(page); return 0; out_delete_from_cache: diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 0e2132834bc7..b30a3724c701 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -69,10 +69,9 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, pgoff_t offset, max_off; _dst_pte = mk_pte(page, dst_vma->vm_page_prot); + _dst_pte = pte_mkdirty(_dst_pte); if (page_in_cache && !vm_shared) writable = false; - if (writable || !page_in_cache) - _dst_pte = pte_mkdirty(_dst_pte); if (writable) { if (wp_copy) _dst_pte = pte_mkuffd_wp(_dst_pte);