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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3A5AC0218F for ; Fri, 31 Jan 2025 19:17:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 60B536B007B; Fri, 31 Jan 2025 14:17:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5B9AF6B0082; Fri, 31 Jan 2025 14:17:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 45A2D6B0083; Fri, 31 Jan 2025 14:17:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 287176B007B for ; Fri, 31 Jan 2025 14:17:20 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 5451AC1128 for ; Fri, 31 Jan 2025 19:17:15 +0000 (UTC) X-FDA: 83068705230.10.03B0621 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf28.hostedemail.com (Postfix) with ESMTP id 9042BC0005 for ; Fri, 31 Jan 2025 19:17:11 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=b3f49PgO; spf=pass (imf28.hostedemail.com: domain of alex.williamson@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=alex.williamson@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738351031; h=from:from:sender: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:dkim-signature; bh=kBP2ejv55jQWoe5lkaW4/iObWJ65jHHcwOH2JS5+DwU=; b=VxgPqkq0IrgJg8vmzyg496YW74a1a3DYU2miDUdkwA+IYsL5Jc4SA4Tf/CfN23dZbhwSPf sWkn0t64PKpfmsto/hZvabWsegjtbbKmNo4rVLATYrOxtKqKXi6oZ35OxE3V0JVt7nqSVg 43wmANLc3ZHbE8iCNV8c0uqziV6EQBM= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=b3f49PgO; spf=pass (imf28.hostedemail.com: domain of alex.williamson@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=alex.williamson@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738351031; a=rsa-sha256; cv=none; b=iNZjEUlvE9N9YkWHdBi+pO6J2+/S9j6BNcQbX5obkBRLy6AV3L6/R1HKX4UL/5Jerug2vZ Gn7bI2wXsMxh6H8W9qdLWJ9DsyDK2lUNJGLoCZ8FOS9RojbRu7nu9vmdyRooU6glddFadk TpqMpXAUIkxaGDFVaOSijkfoHTWcpHs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1738351030; 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=kBP2ejv55jQWoe5lkaW4/iObWJ65jHHcwOH2JS5+DwU=; b=b3f49PgO3a/KcK2zofk5fMqwJ2sNB54OEOBmsv5XoKnjsu9TlmvIy5a+d8Pnjc3ns2fHjy 8L3XY5SaYC6VowFltExKLeEVbIWkIJUiY2m4nfCTkWWpDRguC99usS/HbWhK8gwl45QoWz BCzp09dKhAm4jH8YSb0sSRf3ZL8iNq0= Received: from mail-il1-f198.google.com (mail-il1-f198.google.com [209.85.166.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-266-QiluOoFoNrmZAl_mxgdFPA-1; Fri, 31 Jan 2025 14:17:07 -0500 X-MC-Unique: QiluOoFoNrmZAl_mxgdFPA-1 X-Mimecast-MFC-AGG-ID: QiluOoFoNrmZAl_mxgdFPA Received: by mail-il1-f198.google.com with SMTP id e9e14a558f8ab-3a81764054aso1398425ab.2 for ; Fri, 31 Jan 2025 11:17:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738351027; x=1738955827; h=content-transfer-encoding:mime-version:organization:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=kBP2ejv55jQWoe5lkaW4/iObWJ65jHHcwOH2JS5+DwU=; b=eFYM4tg1MquQwKWSGaYiZmiCoe2cVyCfxWLeClhKcYKe9snbcTYDMM/pi/ZOPOtxMJ G80n+uqpjkBHJGs9mmI7uZxXh9tJ+/HC6wRtVV97IkFKlrrmyj3YnHbwKyOoKiMLmLrJ F4iKWj4PPiSZuouv8zXNdm8WLhAsBNBtWQst8B9XFuK5IIBLOqv1D1QDKhYz5O/hDF8q I+ZAJ4aAF/Nz3ZKL3Fg2UBjaGSi8XPgPsDtF+b1omtHH5EGOGcENUzF8WIyWeELUvkDl sZmCmmsH9ImE+p5L+zzrK3WNMQdymob0YmmaKgSMVhXuRrbQVXPR99NyCfyidn4p8h/C DfzQ== X-Forwarded-Encrypted: i=1; AJvYcCVfRnP+kPzl5ndkHZd5xuFTxffoqDhJ8yCsPU5EhjqfxiiejtjCtiU6EraUUQV/3KcloPZKkXPgYg==@kvack.org X-Gm-Message-State: AOJu0YwEDeKOTHhY8N/YmKUVwcZawl6ZC9FUJnSK7CuSULbSErFIIpq6 Kh4ap3e+wkT9yuHi1umfHdw5vkbn506e/FY5xWUVaJifapUBrv2WAHfgNsdKzibvYoO7CBORUyw u4stzweWfiUa0qaz3IWMsOANBkS6rLokDzsQaw+jpN5vfpAvH X-Gm-Gg: ASbGncti9iwjGrV3oURzkJ4GxUKUh0Gj7sHVLGlGe8veJgwTTzyTVoOObrXZWPjIAHo EEdUUdpdxPKJN7oQox5yxumtWLf76I+v03gZsnc9RX29Ig3vfHwxVhc0xvFvuWFEY388NUAEvVj sCKX59mares2nrcDD7pFGwZyOrp+lrxKyrVbhJqnQW/T5L36qNdqrBJGjx/0pZGyqJTVfzCmikH fv3tbmJfY582/1eH+d9tjwyb/UuymJZqFPtNiam1Dy89gPUHKJt4iQCiJIR1NSdCFPGdS0U5hMz Db8c4ko9 X-Received: by 2002:a05:6602:6082:b0:854:a5e8:3294 with SMTP id ca18e2360f4ac-854a5e83361mr193247239f.3.1738351027030; Fri, 31 Jan 2025 11:17:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IH+Yzd6ZzAd6b5E6xmRCqs2veqaIHe5aVhmKvgpoGadfX/Fj5zXiz2QAdx8dJsDaTaRDEZ/zA== X-Received: by 2002:a05:6602:6082:b0:854:a5e8:3294 with SMTP id ca18e2360f4ac-854a5e83361mr193245939f.3.1738351026674; Fri, 31 Jan 2025 11:17:06 -0800 (PST) Received: from redhat.com ([38.15.36.11]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-854a15d0413sm100237339f.8.2025.01.31.11.17.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jan 2025 11:17:06 -0800 (PST) Date: Fri, 31 Jan 2025 12:17:03 -0700 From: Alex Williamson To: Josef Bacik Cc: kernel-team@fb.com, linux-fsdevel@vger.kernel.org, jack@suse.cz, amir73il@gmail.com, brauner@kernel.org, torvalds@linux-foundation.org, viro@zeniv.linux.org.uk, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-mm@kvack.org, linux-ext4@vger.kernel.org, Peter Xu , "linux-kernel@vger.kernel.org" , "kvm@vger.kernel.org" Subject: [REGRESSION] Re: [PATCH v8 15/19] mm: don't allow huge faults for files with pre content watches Message-ID: <20250131121703.1e4d00a7.alex.williamson@redhat.com> In-Reply-To: <9035b82cff08a3801cef3d06bbf2778b2e5a4dba.1731684329.git.josef@toxicpanda.com> References: <9035b82cff08a3801cef3d06bbf2778b2e5a4dba.1731684329.git.josef@toxicpanda.com> Organization: Red Hat MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: hWoHQkRWY7tvXzZXx3-wsdcGsjWOwQizdL9OABfwTnc_1738351027 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 9042BC0005 X-Stat-Signature: x9rf53ijxanuxark6hm3tirwr483rhnu X-HE-Tag: 1738351031-539245 X-HE-Meta: U2FsdGVkX1+5WaV/fPL31G5Ab3+m2Jz14gntchhn0GGoIJRj2x1MaKJ/MYsYBY187PhvdxEJ95LF5WtCTVIqIwDiVY1oYQdE+KyTmcJPq6L0tah0qv25t0aQ2BFlmZk6qowTTZEJ73ril64FqhF7sEtMUSXHmswTN+8Cv8LETFNqYqE68yPlFDCP32MozVQtdAG2C6xFje7rH/Fg7ymYNHlkYSoqBuGMSwv/QLJOmYXq8bu3u7OQj9GTy/mPwxnQDvWTMvIEwaXfAb76r+7y6hjqTpx+LaNNa3fXe2PqTRKjU+dztuRvzktkCgkIS1o8RwIfmwoN3m1wqLgVd+RkMvTvgq9kVJiiXrYi2XZkVgPUqzbzJBMkidXCkLawuJbw2DpO/URFNhanoGaIrpQpFe9JiQmCuZCMuKFb/s0gb778wqDYFToVQfZtFkIdB+cfZzF/mLBKMRHAx9E8hMPckYFSJuiLyFIPgP52x2WX1P7aIVszH9y7uQn/qVcfCGMZbqBucTuwphxKjPtWXhr6R7tmbgKMSUJlu89OcvDu52E+hYLWhDhtMKuURR66tcaHU+AYEoxLIFcKW6UWO09o3Fj9aTgrNu2ZvT5rbKCp/ksUooZiFnBAIIX49ksvrdfDYzOMmgbnI3l3wEFdBAgN8DtNmGOOycUqm36AZsYAHpAJt9kbGeet6sw60qGcoDN09g/+7ZrJEtZIy4ZS7ia72ixPMDqPcoPZMVD0/AgFoLOUusdSe3chNX6dXw3T0y52Tagu1DWWitCSuYYL4wJEZo38l2JeyW6Zbfl3riv14pXEYfmU/LzhjDJAcuLPBSza1ZqKRv/zX5CWd3EvEghrtXWM6xyxXt4Rs07ygBfqD9B0NVVF8IvA2CNtls+Pgs+LXk2GS3+aboy9kuHaTcwusswCPauAEt7+beLXnXIfKpKnjiTXgkrEKwKneBXboEh8XM1LSllUtaZL9siNOyf r5A1zpHZ T57lqh3R70Uvlj90ofI5NbjanqBVy77+p8UpPProGhUFUmgi+67QNB9jIYjAVCN3DRDSgk/J0chdIshY+gRRUSt0LhRVEbkcygd51GGfsgywm6tNh8MGAulnHyz8FtXXvX5cCrrpIKytimT7MXTeeQoG2mTdVUPmQsZX4a3l+6VQC0ypDcWLRJFLujRw0Zbw2gng6dh+FJ1LUzCmmrZR1j6B4xCorvNDC2Lia5fabveaE1MBsBWWJW6ga8obyUxIpjqrHeBlI6eneN4eJmfBDEVwRY2qnY6F5uAu5IjNCe0+DBBPXoWyfEaC679sdMNCSo3VAsOTPPsBn4QTDlj0oZ91fIPy7ihQvi0AZCqVxOLHfXZdL10YXoMWRTJLRM1NDlZj7FqfbhaRLBTzNX/0lU49v9xR/9wD5RH7iN0AmT9DFJYiXOJSsw7ivwxH48uuCCqOwVMmI7nOyRV4D02x2memkGxAkQ+LR5J+rFLkaMt0SQ8M2/CQ5+6sBKRRfeQjN+tdqr6UQBEj3UsoAHCY2Px5y3w== 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: List-Subscribe: List-Unsubscribe: 20bf82a898b6 ("mm: don't allow huge faults for files with pre content watches") This breaks huge_fault support for PFNMAPs that was recently added in v6.12 and is used by vfio-pci to fault device memory using PMD and PUD order mappings. Thanks, Alex On Fri, 15 Nov 2024 10:30:28 -0500 Josef Bacik wrote: > 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 > --- > mm/memory.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/mm/memory.c b/mm/memory.c > index bdf77a3ec47b..843ad75a4148 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -78,6 +78,7 @@ > #include > #include > #include > +#include > > #include > > @@ -5637,8 +5638,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 (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; > @@ -5648,6 +5658,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; > > @@ -5662,6 +5673,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 (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)) > @@ -5681,9 +5695,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 (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 */ > @@ -5695,12 +5713,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 (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))