From patchwork Wed Sep 4 20:28:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 13791367 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DF7ACD4F26 for ; Wed, 4 Sep 2024 20:29:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D59B86B0163; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CDF7A6B016A; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B31C36B016C; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 7FE716B0163 for ; Wed, 4 Sep 2024 16:29:39 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3189780541 for ; Wed, 4 Sep 2024 20:29:39 +0000 (UTC) X-FDA: 82528196478.27.589DA97 Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) by imf24.hostedemail.com (Postfix) with ESMTP id 677A0180011 for ; Wed, 4 Sep 2024 20:29:37 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=fEE3mS8J; dmarc=none; spf=none (imf24.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725481753; a=rsa-sha256; cv=none; b=iygrCdc8T4z+oBlTc+fYb0kw+WPJPImnSGEeNyFVoZgVVqQGzm69w4IryT4SL6UbDZD1CO uRif9R1062RvTGJiYIE+gDVvjq/aURFei4owXhMgxRd6TWdCiKBlEgJQBgHSPtQAJUpniv 7qd32qBwaes/33mcj+h6lx0vzV7GlBI= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=toxicpanda-com.20230601.gappssmtp.com header.s=20230601 header.b=fEE3mS8J; dmarc=none; spf=none (imf24.hostedemail.com: domain of josef@toxicpanda.com has no SPF policy when checking 209.85.160.176) smtp.mailfrom=josef@toxicpanda.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725481753; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IDO1PsR4jqBoDIDFjuXXy+JZDMdVbZ460dPfM2iRCeI=; b=qkZr3p7BbZXc1qhAnTqe1DuNHAKIsqvkvEhYyM+/bz+TXOZY1s7dj5sInPk+v1zwitCpWu eI1USH4UHm/RZ4SwP+P1/FIDNDuMHFSdn8ejsBF6/oxYoNsKBD/kqUKmcoYsCRWoOsQXL9 Lx3rJcjDE0imZyfd3VLhtxUxJg3/cbs= Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-45681098bbdso361071cf.1 for ; Wed, 04 Sep 2024 13:29:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20230601.gappssmtp.com; s=20230601; t=1725481776; x=1726086576; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=IDO1PsR4jqBoDIDFjuXXy+JZDMdVbZ460dPfM2iRCeI=; b=fEE3mS8J15we/ctMPkyJMd8UaWHa2ncW4CRi9MJpyCRhbPenWcUisVdbqGRyi7fPlT ICPMmCorkoUbiv1DOpHG63bqrEuHfA/GJGoFGIArY530pzsf5KGBAFlq3ceF+Y1fchPq DHmwXqyfKrth6VOCmiaFy9e9hSUe3ZQDskiQHHDu0UdiW7YJTNmyrxaZhavEc3kZo4JU xFM/tP8plNw3ctfUeuDXY9cVTnhSEyzPeXwEgRoRUlEjLbYVMbVx0ogcihWocxTkPuy2 ReAzu1Aamtw1eKG24t2HpruhLgGPL1fA/8+odRYwSdEdgz/90RenXXha/YXCYFw7k7BA 5fXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725481776; x=1726086576; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IDO1PsR4jqBoDIDFjuXXy+JZDMdVbZ460dPfM2iRCeI=; b=qio3qZJ5N8jKX01ApHPiidTWRP0w8iEVrK7TVm35/oSGCJXqxEnHWo4IOpgR8u+3SF icR6iEknQLyqZGbCWHHPalTNWEQBARXTWXQcF2UbRndUXjzUWeSZwciZEVtivz7Flc1M hN03IK2CITk/CdCX1rTxUQMPSYOGs8Ic4bOdo0vsb3afgOiyiW8BNC/0iNX5IB55RLBk a9AE9ySw8O/0WHtcrxD7YDrTxcSDC6urXnoUmUia/itO05e2huUzvKv+EB8Hm3xp8KRQ J/FHtP0MU0UT6eLeqnchSidogFZnyREPkkQ21J/A69XnpbQqKW15q3nYu54uySbXv3dC TovA== X-Forwarded-Encrypted: i=1; AJvYcCUxKUC6YcA9aI2eUnQcrP+bw8QK2+b2jCsjfgsdPwIAq91i9kl+kUjeJ2mWHlLV8BoM5bPAqVRhQA==@kvack.org X-Gm-Message-State: AOJu0YxFYhwDjmiN/WRur5kg83Q4Uz38fjfXU6IrpC+tc9Edq9DEXRkE FB00lgLOeIECt/yUxEh7DchrQqHKvbT6FKndppZakB+gGnC3ShbC4oWQG9gYTuI= X-Google-Smtp-Source: AGHT+IFq1hdENBAe17o88j4Kfx5nRP4kOzH63jEqqDXfFeqQM7cpPGSq1qeT7V7dadPcUVEqgl24EQ== X-Received: by 2002:a05:622a:1311:b0:447:f8b1:aeb9 with SMTP id d75a77b69052e-457f8bc54b2mr57102421cf.16.1725481776515; Wed, 04 Sep 2024 13:29:36 -0700 (PDT) Received: from localhost (syn-076-182-020-124.res.spectrum.com. [76.182.20.124]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-45801b4cacdsm1493041cf.42.2024.09.04.13.29.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 13:29:35 -0700 (PDT) From: Josef Bacik To: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, linux-xfs@vger.kernel.org, linux-bcachefs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v5 13/18] mm: don't allow huge faults for files with pre content watches Date: Wed, 4 Sep 2024 16:28:03 -0400 Message-ID: <80e7221d9679032c2d5affc317957114e5d77657.1725481503.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 677A0180011 X-Rspamd-Server: rspam01 X-Stat-Signature: 4eyyu8uszdb35q9wb4iwfy3tuzowucji X-HE-Tag: 1725481777-60264 X-HE-Meta: U2FsdGVkX18bTEgNJ3O0gqV32RNwmwQQ2SqI4vqZQfzrLYjmHs0tzGF81PP8WoMRFj1xVO5tLJfDkWGo+KndHh9lFdZUO0ItNCVB6dc/vnQwefOHV1g0dOVm/Nt5DvPOL2hr/lUBOreS9lrbo1ehHv+s0xRJctfwKLo5zZbO5DrGUyb8eWYwxaNDLViANjnnuiUqvEWGyaLm0eruIytrb7trTcVXtKGRTLPxPuPaYk7vfVRmG6sKBbCEfgzfJgAp4vSWiEHk798mWwTNbGQelCS7+KzfmSELKiKNphwSxNgbg7wj+t2VOYbga9hjK2xnaeropHZ7CgPFqJXqwDMtOx6jvr1SjvPPe8fPYXoamoe0nswo/akW3nuXiX3xRxAVn5ZVmJR3rNM2ziIXhTYEFxC6OEnf2Gk6XvKkj+rXa8/K24yfrDZWh42Rd1J6p3a3EkVjr71wH5QmNn66lhcZSf9LAaOX6pgaao3rfZ2j/v2/ZyagGk+m0SGixhyZI3ad88PB7Kx8dltAjy2EpbF0D5Soa/RlrAJ23zMDO4ADqlJ8mJooEwQndRkFJhtVPeL3+77L/2skZ434KkyWmMJoMReKpbXBDA0Rc/3CMd1jNmsYdaxjpe/MojdITRKpJIDZ+K3xfsdcKLT0tt45bnceBqWLKiLyDfSQsv1NEgGZQd993vNuWxtRV0vil++Rrg3BGEEgXf+bXbxz5GohLfnezRsnxZAYU45OO6DIqKKM39mPeo/ZcvgVJ4dyJ+Y2+By3pQpp7ec4XQzunNbNS/ctGRo0Rz3Ww3yhGS6EXlzlaAQGdxW1meCNtxNYbzADfm53HP5VtqABhXZFArmomjpQB0XCT9q7pBXwiN0bdyP++Rq7ioBwjdggTSKLoCRrG5zfuNDNWEOW6xqE2h0ht81NcPoCF+zoPsgqX21syjopJyYmmkzNgl8C5UEtW/0NR2M+s0bkPun8LbsKJ5FPDEI X8/c1WJh uVe72UYwM+Cm7PiwX3MC/TEgWUixC2K2/T7V8zoEeb/YhGA4SWmGHQlg9h4TnsHrlUIde5rZbOcYZCERlK6+AuO63nZV2EUqK4d820Nh2t/UwFgBWkdwnY+1zuMj9Pqg6j+Nnb6GZdDiPpkdWHr2oIoHi3VHsm4ykSR4NTcAzd/7yzAVq3HL3HjXjCqyxA442CkpJ0a4lglL0XR2N/47J6P2w4e6Z8dcVrUnwIoZs/J7hY5CiSVHKRD93uZr7mxq+duIETQJxpUlkpnF0EMpHikVmrrNZSrB8Mz/nrob9Ryib/Th8NbdePw2gGwSaz1k46CYdtd+YZmeg/t/daTGJ5691z/EwBnhzIYt6xOj38zPZEESUqwYJS+3JtJV3awWXP6CNMEY1NtKzRRVtIquYgDsLhQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.021840, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: There's nothing stopping us from supporting this, we could simply pass the order into the helper and emit the proper length. However currently there's no tests to validate this works properly, so disable it until there's a desire to support this along with the appropriate tests. Reviewed-by: Christian Brauner Signed-off-by: Josef Bacik Reviewed-by: Amir Goldstein --- mm/memory.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index d10e616d7389..3010bcc5e4f9 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -78,6 +78,7 @@ #include #include #include +#include #include @@ -5252,8 +5253,17 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; if (vma_is_anonymous(vma)) return do_huge_pmd_anonymous_page(vmf); + /* + * Currently we just emit PAGE_SIZE for our fault events, so don't allow + * a huge fault if we have a pre content watch on this file. This would + * be trivial to support, but there would need to be tests to ensure + * this works properly and those don't exist currently. + */ + if (file && fsnotify_file_has_pre_content_watches(file)) + return VM_FAULT_FALLBACK; if (vma->vm_ops->huge_fault) return vma->vm_ops->huge_fault(vmf, PMD_ORDER); return VM_FAULT_FALLBACK; @@ -5263,6 +5273,7 @@ static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf) static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf) { struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; const bool unshare = vmf->flags & FAULT_FLAG_UNSHARE; vm_fault_t ret; @@ -5277,6 +5288,9 @@ static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf) } if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) { + /* See comment in create_huge_pmd. */ + if (file && fsnotify_file_has_pre_content_watches(file)) + goto split; if (vma->vm_ops->huge_fault) { ret = vma->vm_ops->huge_fault(vmf, PMD_ORDER); if (!(ret & VM_FAULT_FALLBACK)) @@ -5296,9 +5310,13 @@ static vm_fault_t create_huge_pud(struct vm_fault *vmf) #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; /* No support for anonymous transparent PUD pages yet */ if (vma_is_anonymous(vma)) return VM_FAULT_FALLBACK; + /* See comment in create_huge_pmd. */ + if (file && fsnotify_file_has_pre_content_watches(file)) + return VM_FAULT_FALLBACK; if (vma->vm_ops->huge_fault) return vma->vm_ops->huge_fault(vmf, PUD_ORDER); #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ @@ -5310,12 +5328,16 @@ static vm_fault_t wp_huge_pud(struct vm_fault *vmf, pud_t orig_pud) #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) struct vm_area_struct *vma = vmf->vma; + struct file *file = vma->vm_file; vm_fault_t ret; /* No support for anonymous transparent PUD pages yet */ if (vma_is_anonymous(vma)) goto split; if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) { + /* See comment in create_huge_pmd. */ + if (file && fsnotify_file_has_pre_content_watches(file)) + goto split; if (vma->vm_ops->huge_fault) { ret = vma->vm_ops->huge_fault(vmf, PUD_ORDER); if (!(ret & VM_FAULT_FALLBACK))