From patchwork Thu Jul 15 20:13:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 12380925 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 4E8B6C636C9 for ; Thu, 15 Jul 2021 20:14:33 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id EF26A613BB for ; Thu, 15 Jul 2021 20:14:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EF26A613BB 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 B17168D00FE; Thu, 15 Jul 2021 16:14:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AEDD28D00EC; Thu, 15 Jul 2021 16:14:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 967418D00FE; Thu, 15 Jul 2021 16:14:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0205.hostedemail.com [216.40.44.205]) by kanga.kvack.org (Postfix) with ESMTP id 759128D00EC for ; Thu, 15 Jul 2021 16:14:32 -0400 (EDT) Received: from smtpin07.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 520941854AEA1 for ; Thu, 15 Jul 2021 20:14:31 +0000 (UTC) X-FDA: 78365924742.07.9787B20 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf12.hostedemail.com (Postfix) with ESMTP id D849410000AE for ; Thu, 15 Jul 2021 20:14:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626380070; 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=2wghNqx4JftAFaj2ufqftGGQbCHL8Jx+CkAGBQbGsx4=; b=aDbEClR0ioRcUwaxhydwG4uk+DxFqFC6K+IrKUh7ONz01BNvR1kqsrF0XLdcn4yJ41s/+Q JOyDxXsuQkktFCMiR1cF/k75shv7K1JmrDyiud+XLY0X3jSEBZ9tMW/DGy9yGlWvIVWG0R do9wegR0Qs3oS/Sb3ituh9wNINXcHQs= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-272-gl2m1_cgO3qNFFELKFCNBA-1; Thu, 15 Jul 2021 16:14:29 -0400 X-MC-Unique: gl2m1_cgO3qNFFELKFCNBA-1 Received: by mail-qt1-f200.google.com with SMTP id h17-20020ac858510000b0290251fc608f73so4923847qth.10 for ; Thu, 15 Jul 2021 13:14:29 -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=2wghNqx4JftAFaj2ufqftGGQbCHL8Jx+CkAGBQbGsx4=; b=TUerCSGZPuVgB6gEYLr7Yjyc1zQJncns7wxXhWCedd943//3qIs8L5e2qsY74v5SGm wjN9vDkJuzZ2XYnHbRIIs/tH7VDqYCyjCG2YRcEkhUGnapb8Mkfe3pn+EL43ZVSZZIEH 64x/y74DK7EWImpGI7sHWp84PCDPY1d+aRoUmwItJLXn8u7Vi245R3uY2KJIH8xiQ+/1 H8uHgylvxDJsjkJIb/21vVcQatS+rnlc6QD1BUw8H6HVgP9I9lkUg3kU/pedx78fv4co RUfsrW5sakwtFJcu95IwmcNhrdg1sb6neidQjAaj8rthkzxeR7MqiWJ9JJLwBQNz3Ksb Knjg== X-Gm-Message-State: AOAM532B6WUpPCVXHox3xcPMiZNcVP5NKeRHwAc7bc4bk2AyXieIU7Ks Eh8//GW6/ch9LdM/VxhsHpirLeemoe2td9PUTAA2e8sPxkx0Fwu2re8U7xxq2ONm+ZnUZDiahw9 9ZcONifcECDGiOAf/QKXVK2RQduUeHbVHdGeYwN7DwwZjD+QrkoakEFQFW7dR X-Received: by 2002:ac8:7f87:: with SMTP id z7mr5609335qtj.238.1626380068466; Thu, 15 Jul 2021 13:14:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwYiIOaBejzNlOkLIIJ+VXgCviFKyIjcPF0DBG/jNzKBWMzDBJuvwvh/GVjLWwetiFqzg2V7Q== X-Received: by 2002:ac8:7f87:: with SMTP id z7mr5609296qtj.238.1626380068187; Thu, 15 Jul 2021 13:14:28 -0700 (PDT) Received: from localhost.localdomain (bras-base-toroon474qw-grc-65-184-144-111-238.dsl.bell.ca. [184.144.111.238]) by smtp.gmail.com with ESMTPSA id p64sm2915206qka.114.2021.07.15.13.14.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jul 2021 13:14:27 -0700 (PDT) From: Peter Xu To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Jason Gunthorpe , Mike Kravetz , David Hildenbrand , Alistair Popple , Matthew Wilcox , "Kirill A . Shutemov" , Hugh Dickins , Tiberiu Georgescu , Andrea Arcangeli , Axel Rasmussen , Nadav Amit , Mike Rapoport , Jerome Glisse , Andrew Morton , Miaohe Lin , peterx@redhat.com Subject: [PATCH v5 01/26] mm/shmem: Unconditionally set pte dirty in mfill_atomic_install_pte Date: Thu, 15 Jul 2021 16:13:57 -0400 Message-Id: <20210715201422.211004-2-peterx@redhat.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210715201422.211004-1-peterx@redhat.com> References: <20210715201422.211004-1-peterx@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=aDbEClR0; spf=none (imf12.hostedemail.com: domain of peterx@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Rspamd-Server: rspam02 X-Stat-Signature: mr1993qnst8jtnxcpqioxqntgke3n4k4 X-Rspamd-Queue-Id: D849410000AE X-HE-Tag: 1626380070-537357 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 --- 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 70d9ce294bb4..dc9f95b5fb34 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2449,7 +2449,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);