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 97102C83F1A for ; Thu, 17 Jul 2025 11:52:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0A89E8D000A; Thu, 17 Jul 2025 07:52:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0567F8D0009; Thu, 17 Jul 2025 07:52:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E61288D000A; Thu, 17 Jul 2025 07:52:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id D3F958D0009 for ; Thu, 17 Jul 2025 07:52:31 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 9B53A1D7C3A for ; Thu, 17 Jul 2025 11:52:30 +0000 (UTC) X-FDA: 83673594060.23.626BFAD Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf11.hostedemail.com (Postfix) with ESMTP id 6A94240009 for ; Thu, 17 Jul 2025 11:52:28 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hovra43i; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752753148; a=rsa-sha256; cv=none; b=x+kd+1sjH8u9cPoEZpDhOT71lEb3GZFDSzk5O4rNkFg6HN9ugJn+83n9YCqAz5zSet2HIS Piq68k8K2GoT3gtr6S70O0Gl6AXMg0O30cc/Uw78TVj0OQ5kT+emQpMBUjay6F0K5ZdsVa /pXaKDYdHRfswjTd3wZeLn1l5lrrTfo= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hovra43i; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752753148; 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=WawR8xzOLp+WGO3JwZK8yJOVf+K8h9KX2DcE6xt9pRU=; b=Nb3hmtgSJkQ0D6efFtIlbC6/wZpjaxeZOVCdEFFHB+Mj2IxAKPB4OF6J+Rj8ddug1H+WWy Nu+lewMU9xe7hkxuBhWVic5K/dfONV7bl3UFcnqz2geiBZs6ZOvAU30Do/4L0LddviEdhh +WHuAHMepGr5hz1yA0njuRwekRvmL+0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752753147; 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=WawR8xzOLp+WGO3JwZK8yJOVf+K8h9KX2DcE6xt9pRU=; b=hovra43iMTyf0y8y9ueFmfIlzTlKFSW85ZKj24pk26m2sk/zCuGwdFc1b9n+0nwL1LGXPv YRqpIjXYYzNu5384WCA3GLgRoiuY3IEAiPQTcJLRu0Y+C0krfTbk7RHKcjCApe9uh/Hk/a GbduXrK3iB9/sGKyvP/BdRv1AkNAEqU= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-300-u51LDKYRNACQjb8Qxvvaaw-1; Thu, 17 Jul 2025 07:52:26 -0400 X-MC-Unique: u51LDKYRNACQjb8Qxvvaaw-1 X-Mimecast-MFC-AGG-ID: u51LDKYRNACQjb8Qxvvaaw_1752753145 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-455e9daab1cso2529885e9.1 for ; Thu, 17 Jul 2025 04:52:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752753145; x=1753357945; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WawR8xzOLp+WGO3JwZK8yJOVf+K8h9KX2DcE6xt9pRU=; b=PKaNfNH4P/WywWZnM8ACj+OAsWm+BsEjfiU97len1UyxD1qqJ9UONjfZFnlarh2rSY NvTrasiwwurOh86jq+Vqm/UuHvCMSqtIeuf5YalO7I8231PU9Iwf5Sc9U/+M854XIl12 YLS5dcG+CLr74Ok3uUqe4QgkAomVF5hYcigDy8iuHfDA1MwQ4DOsSttDAQ2v5XJn3wqC WJv1q+E/NqL8PYnkU16Vwr318qKh+387E79K/aLrBLerR9O8tXEMpAy53p2CQSng6N4G ZDR0TZDDRcczzvrE6ZeFJSyIqU88fKsTBgEbOvyU77RQfjXngB9JVYNRPB5uSB6B+44n /nZw== X-Gm-Message-State: AOJu0YzFRmZUjzDm4pVggwvlYTXcdXZZvnAH+XtfaKjIUtzXMp1NQBiP xQ2OIkcy+VKw39VpA07MEZynOZj6FODMVebVbUqIyIjM8r/LUhN3aExsGNyY8id2THo7Yjnsf/G +xiphPR+4++DBwf5jTl45hfvIlLTf6KFl2WY55QP/WBbEUMyJ4A/5 X-Gm-Gg: ASbGncs5IgfK3gpvQ1Cd4pcWfkSeMflt8JwyxLU7XHvtJiGBsa96ms2mvv0ruuprip4 o8OB8I6c68oXwe0NcgH2ipzc8f/BCW3FnK9fw2y2rX27s5Lfw6/JWJWzbmjMQNwWmqWNLua6BhY Lt811kEObDTjqrUmFt4S3rKS5cUFkO3u2CsU/4ofgwN7SapqX/+ww3H1GuxToH93sMP92xhsQf+ RmgfKcYMdymIYxpJAcbUslfahWpu5o9+3w86i33BXiUNt3/rWfWJJRcj8RRlajQxlypsz1rK2jD A7DOzAtgzycQQ541D7TazCU9/gKelLef918Ew5VVoaMG3LNltSQ6QLqMOxnIX/r4DAlXSww9eW5 o8qT/IBxXPATdiXLCPFPxwLk= X-Received: by 2002:a05:6000:4b02:b0:3a5:52d4:5b39 with SMTP id ffacd0b85a97d-3b60dd4ab27mr4713903f8f.8.1752753145107; Thu, 17 Jul 2025 04:52:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFDhmg9Ls7QQA6yWIIBzDvc6abI92P/fYxcVRDFmyoxlxNBqWLFwcd4nrVInyOX88jAc9Q7DA== X-Received: by 2002:a05:6000:4b02:b0:3a5:52d4:5b39 with SMTP id ffacd0b85a97d-3b60dd4ab27mr4713858f8f.8.1752753144606; Thu, 17 Jul 2025 04:52:24 -0700 (PDT) Received: from localhost (p200300d82f1f36000dc826ee9aa9fdc7.dip0.t-ipconnect.de. [2003:d8:2f1f:3600:dc8:26ee:9aa9:fdc7]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45634f9d599sm19697745e9.33.2025.07.17.04.52.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 17 Jul 2025 04:52:24 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, xen-devel@lists.xenproject.org, linux-fsdevel@vger.kernel.org, nvdimm@lists.linux.dev, David Hildenbrand , Andrew Morton , Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Dan Williams , Matthew Wilcox , Jan Kara , Alexander Viro , Christian Brauner , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Jann Horn , Pedro Falcato , Hugh Dickins , Oscar Salvador , Lance Yang , Alistair Popple Subject: [PATCH v2 4/9] fs/dax: use vmf_insert_folio_pmd() to insert the huge zero folio Date: Thu, 17 Jul 2025 13:52:07 +0200 Message-ID: <20250717115212.1825089-5-david@redhat.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250717115212.1825089-1-david@redhat.com> References: <20250717115212.1825089-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: QwXWqG6nx4pOO8-QOLxRP_TI6ok684Tu4bjoBaI41JA_1752753145 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Stat-Signature: xy9bcorwzpmsknfpdqktcwxq951ywets X-Rspam-User: X-Rspamd-Queue-Id: 6A94240009 X-Rspamd-Server: rspam02 X-HE-Tag: 1752753148-764738 X-HE-Meta: U2FsdGVkX1+92u83r0XtDs0f2LJbx5ic51+7b5Nb4TnVsEgYD2bntvxOzsnQC1iYjvIp8EKq+ejyYXET9heM0xrXVPq8NAK0/B2Ii7kQjNeOnrRZzV4LwFlHsvWe3unVzfR5JSNQ9Ms3hCnqMYFo1q6Bow4XPF43bg0nEdU8tAxbYY2NLR2JHbYMo2pEySAHas9eSzMJ3C5rFDqwHbbPKoAXrsVb9YbsdAM/lZoHm8Pk9JtWcGhH6biVqi+Us7SSIMKoILCkzv3mBQFnEkUF8dKrsPrALhrvOp/TkmelTr9WOVf3u15orgQdZ5cdGbWYFp88Nx4929n40JHEO4m0IAY8u6lygEtbyqy3srrB2YB+DmJ8BdU7Al3Deq2RtZ64ZzVinPM1LZtgxhiKUvnoC0FluDHCBCKZOf6TwOpX8in03Wf1WlqdWZpW81dwhklxXB9sKawvaJlfWtBzpygIfexu8PByMhnO5wrgkuimEvmEIeuG/k0TbPOMyFGVcBIKw4sgXrar8hc/jCQBOYu/DU/vueqEvw0ampoeI92LYLlDwBVCMj17nYBqtyf2jlvBoQwAZ6ZbiAuBzsy51URQOItXKBPz5FgIkImqqM6x+mgi4cVaOg4U/UXL6mO01UcaZIoQg6Ib6bIvx7EXIH/jAjp5Sv8GQ+Zck1PHsttdFiVuF5H6NAuUnBQDGiyBjZRt4B8jGhoMndNw6XqGq4h0aRhrCTsUzXujilWOpIa7VqPcY9cpSAa8W1JOMbfkSSpUsSmNpvf4a3oCdOKqOmstAvFzA9pLvIUSmHnXqkjpm1+ZtAQoyYQqkNRrj9Gc57RwAHhEusIUMTagxxPAGSmqUq/CCN4cFFNlMom1AdzqllZHxMJTQx4WXY6DygVDtDq9hfsSK0tIymNWi3ul52yRvhAidiCBzITzcHmHfDdgTrXUtbYkkZ7hiWv59npdO1cVckbuRRY3ldWLbzi832u 0PeRs6N6 uD92CfosMiFhnggH03aEhlSyQ1TrNnvWpuXU3nOFFrGnsepvZPuyyOr+3ZBc0+nZqH/xQMyCE611bG/sU1C8QnErVehj2VJdgcLkV3Io7TpXRWT/+hAI6ii3Bi59BKiu4ClKNPNkcusy0EmGHv+nzxbFe+c6eh1/Mqe6qhashuPRKysgGMrf58UYlqpTsjkk1sQJvrjtCAOpLOxY+32IKhU/OX2nYED3SberDw+m+cX0XvzWIiBMtcpjzvvruaoI02rrkeQpK2znSAWDt5ynita6JXF2B7kZcCeeRLCbjfn+InVJB6Ly2pV2D+wtblzMM/GNoOICrixegJWO0lTjW3dkI9zswGETauOSDLkCx+0kjRekksELCswQ3ueClTOMVhQKHWnEdiCDyHcmDj0Iu6ZioPvzwxC5tz2uD5N3DEtHFmfHsmTCUOcBkxErGtyOSVDOn9AJ1N03bvPhW22F6fWlFJm25KQLS+aprrV9V8laTkUFnq2Dyv/ssuzXsNQGTfzk3T40YMF/PlVZ3EIUqqwUdapiAyQJhj0yXoM5BJZdQwLD+qJBeiBiF9NLBLQPPgW3StDWPr1tOxTg= 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: Let's convert to vmf_insert_folio_pmd(). There is a theoretical change in behavior: in the unlikely case there is already something mapped, we'll now still call trace_dax_pmd_load_hole() and return VM_FAULT_NOPAGE. Previously, we would have returned VM_FAULT_FALLBACK, and the caller would have zapped the PMD to try a PTE fault. However, that behavior was different to other PTE+PMD faults, when there would already be something mapped, and it's not even clear if it could be triggered. Assuming the huge zero folio is already mapped, all good, no need to fallback to PTEs. Assuming there is already a leaf page table ... the behavior would be just like when trying to insert a PMD mapping a folio through dax_fault_iter()->vmf_insert_folio_pmd(). Assuming there is already something else mapped as PMD? It sounds like a BUG, and the behavior would be just like when trying to insert a PMD mapping a folio through dax_fault_iter()->vmf_insert_folio_pmd(). So, it sounds reasonable to not handle huge zero folios differently to inserting PMDs mapping folios when there already is something mapped. Reviewed-by: Alistair Popple Signed-off-by: David Hildenbrand --- fs/dax.c | 47 ++++++++++------------------------------------- 1 file changed, 10 insertions(+), 37 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 4229513806bea..ae90706674a3f 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -1375,51 +1375,24 @@ static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf, const struct iomap_iter *iter, void **entry) { struct address_space *mapping = vmf->vma->vm_file->f_mapping; - unsigned long pmd_addr = vmf->address & PMD_MASK; - struct vm_area_struct *vma = vmf->vma; struct inode *inode = mapping->host; - pgtable_t pgtable = NULL; struct folio *zero_folio; - spinlock_t *ptl; - pmd_t pmd_entry; - unsigned long pfn; + vm_fault_t ret; zero_folio = mm_get_huge_zero_folio(vmf->vma->vm_mm); - if (unlikely(!zero_folio)) - goto fallback; - - pfn = page_to_pfn(&zero_folio->page); - *entry = dax_insert_entry(xas, vmf, iter, *entry, pfn, - DAX_PMD | DAX_ZERO_PAGE); - - if (arch_needs_pgtable_deposit()) { - pgtable = pte_alloc_one(vma->vm_mm); - if (!pgtable) - return VM_FAULT_OOM; - } - - ptl = pmd_lock(vmf->vma->vm_mm, vmf->pmd); - if (!pmd_none(*(vmf->pmd))) { - spin_unlock(ptl); - goto fallback; + if (unlikely(!zero_folio)) { + trace_dax_pmd_load_hole_fallback(inode, vmf, zero_folio, *entry); + return VM_FAULT_FALLBACK; } - if (pgtable) { - pgtable_trans_huge_deposit(vma->vm_mm, vmf->pmd, pgtable); - mm_inc_nr_ptes(vma->vm_mm); - } - pmd_entry = folio_mk_pmd(zero_folio, vmf->vma->vm_page_prot); - set_pmd_at(vmf->vma->vm_mm, pmd_addr, vmf->pmd, pmd_entry); - spin_unlock(ptl); - trace_dax_pmd_load_hole(inode, vmf, zero_folio, *entry); - return VM_FAULT_NOPAGE; + *entry = dax_insert_entry(xas, vmf, iter, *entry, folio_pfn(zero_folio), + DAX_PMD | DAX_ZERO_PAGE); -fallback: - if (pgtable) - pte_free(vma->vm_mm, pgtable); - trace_dax_pmd_load_hole_fallback(inode, vmf, zero_folio, *entry); - return VM_FAULT_FALLBACK; + ret = vmf_insert_folio_pmd(vmf, zero_folio, false); + if (ret == VM_FAULT_NOPAGE) + trace_dax_pmd_load_hole(inode, vmf, zero_folio, *entry); + return ret; } #else static vm_fault_t dax_pmd_load_hole(struct xa_state *xas, struct vm_fault *vmf, -- 2.50.1