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 7092EC83F17 for ; Tue, 15 Jul 2025 13:24:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6CB1D8D000A; Tue, 15 Jul 2025 09:24:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 605918D0001; Tue, 15 Jul 2025 09:24:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 47F638D000A; Tue, 15 Jul 2025 09:24:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 24C228D0001 for ; Tue, 15 Jul 2025 09:24:08 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id D098512DC33 for ; Tue, 15 Jul 2025 13:24:07 +0000 (UTC) X-FDA: 83666567334.06.DB2243B Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf09.hostedemail.com (Postfix) with ESMTP id A7F4F140006 for ; Tue, 15 Jul 2025 13:24:05 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JGqOZEo+; spf=pass (imf09.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752585845; 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=80PJLXORrw3H7rwjCmXyFxVPsu/BFZ5pBpUGrZ/8JVA=; b=pvh0gSZTi68UT+iWYA/F9VbbD4Blg8OBlKP+OvWk3ZBMRzZsJHcHIjxPTzCMIc9SQML6vp tIU1BZhx7y1T5YMu5cCkyhtcQFet54Qkit+Z4+5V/D65BhjQJXxaXFWE0gqlbKStOE03w8 sAHeKaGh1sliA5vaOUL8Ano7FhT5lCI= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=JGqOZEo+; spf=pass (imf09.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752585845; a=rsa-sha256; cv=none; b=GDE4iPMys8ePSbz51ewMeOAT/wivVivsmNkMIbF/ySRmvM/62Wmy3yYw2qs/nYEhumRuPl TgBKCBkXc23z1ehHV1PpwfbZfgeXkE9j3at2WWAaCb3drXitVvd6bFpLCX+3eUMHCBlw4y IXHMHo/TqlXeIvm+bY9ZjzHzuPuIHSo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752585845; 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=80PJLXORrw3H7rwjCmXyFxVPsu/BFZ5pBpUGrZ/8JVA=; b=JGqOZEo+oTLb9+6P/0Om5vIyePNysJU41M+u0s5NJxTpa4rTA4HgxgL9JjTniOWyz1yLQI 9MApVInTIQ0r3jU1tZhn3QCL4Vkosdf7RrvBIfsx9kS+2gKGB+4sV3SlnqwMAxr04OpTmu uIHEKUxsCbI7ZpddttgEm+WjAiMltrI= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-474-r3PP6eAbNBe-71GzemiB3g-1; Tue, 15 Jul 2025 09:24:03 -0400 X-MC-Unique: r3PP6eAbNBe-71GzemiB3g-1 X-Mimecast-MFC-AGG-ID: r3PP6eAbNBe-71GzemiB3g_1752585843 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3a4f65a705dso3611747f8f.2 for ; Tue, 15 Jul 2025 06:24:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752585842; x=1753190642; 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=80PJLXORrw3H7rwjCmXyFxVPsu/BFZ5pBpUGrZ/8JVA=; b=smIsYQo/+WI8yIGC2CpJigzyBBX/1a4RfFIyToGrqag9j1xpWVJEai6mZOdInWnPY2 ZzkvhbTBChZjz0Yk5zkoZjD2+PAUyhWKu8GZ6B22Q9Ma5Zzh1GpF1s2OimQ5u6PQM2Gw cL7lsXu/uoOKOpE+cbqB2xx5EQvaAkmyUO0vXkltPF4PKBpN4oKlg99GaAVjLe8NO3W5 6E+e9KfumCWM3SsusEAD1O++uuqSK/kod7KIRRYD7Y2N+rmHmFifsJoZhNr2DWKQeRdJ lCd3W0C4y21+SyX0hCirqSErMPWKymaDH2AUL6OYlg1S0Q4wW0TkstZBhgaa5qi89rRy cfzQ== X-Gm-Message-State: AOJu0YwcDEAotKYxDrYE3btewfbyS2SFivbTqH9NieBd6UA/pYCRgoZS ISpuoAPNaeyZrxPnVoJhV5ZqGJ9DD8cx3f4clclUYZ5qK1YkbG6M1asSoYcjO/tI45/AzDYYNWH JojuVK1r6Vj3kGES1ax3CNVgJWxKfs++avLRAptzk9N/jX5/vY2qk X-Gm-Gg: ASbGncsK1G4nQekjJ3tbOoMJBOF9bP/SE6hulnDuOC0SLO84n/w6PGt/Cig3T8s3naY rGTEH31NrK+3kdDV12HU8iluUPmnxeltHerugbzzwOmi/zO17nJyVsJEidfFpu6MfbUX45NO6BG Sxll0gdWk08RVML9YdKXnEffy6ObAqSk6pDSkrXicSEd4fm73jl8Nk3dA1OfG7aZWfdQ6Gdbstq rayN70kAol4CnxN87SNJ8HBnd37PW46AL44f0e0odpHCoE5RlkDsw6M7naG2flUMoTb7RNzTeFQ ui8kM68ar0CM1X/YZPcFoIhiI1cFkVMQ8AAUjUwuKoPYiMiPIeTkhsgJ1LXi3hluH7bCLTIDvF5 AzhUI3wU8cSi8Zk+EdccUkfNO X-Received: by 2002:a05:6000:230e:b0:3b5:e6f2:9117 with SMTP id ffacd0b85a97d-3b5f2e3083dmr13500617f8f.39.1752585842424; Tue, 15 Jul 2025 06:24:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF4Mv4tTd5MMu5ncCf3BOQ9JFfOJXwaxaOdtEK+d74QRgh71f+xeQhxUGyEq6hfTSErOkM9rA== X-Received: by 2002:a05:6000:230e:b0:3b5:e6f2:9117 with SMTP id ffacd0b85a97d-3b5f2e3083dmr13500595f8f.39.1752585841971; Tue, 15 Jul 2025 06:24:01 -0700 (PDT) Received: from localhost (p200300d82f2849002c244e201f219fbd.dip0.t-ipconnect.de. [2003:d8:2f28:4900:2c24:4e20:1f21:9fbd]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8e0d719sm15297274f8f.54.2025.07.15.06.24.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Jul 2025 06:24:01 -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 Subject: [PATCH v1 4/9] fs/dax: use vmf_insert_folio_pmd() to insert the huge zero folio Date: Tue, 15 Jul 2025 15:23:45 +0200 Message-ID: <20250715132350.2448901-5-david@redhat.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250715132350.2448901-1-david@redhat.com> References: <20250715132350.2448901-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: JkVBM-O6_sP1tWHEVvVymzIVi2W1_G9GhiVUroh44o0_1752585843 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Rspamd-Queue-Id: A7F4F140006 X-Rspamd-Server: rspam06 X-Stat-Signature: gdt6umwr8xpss7ftny5b4r53dnwit1d5 X-HE-Tag: 1752585845-40786 X-HE-Meta: U2FsdGVkX1+++uSdQg8zAWIwf3jnzZL07aKBQ2TKfwPPuvxZbua3ibcS4isGojBHUAtTRtSBuhzMij/QDpvTcUhmmbzqW7n4+B2SsaIbrkOl+muChZzMVJ/fRJ+ioQLWahhbOtUX0vgi0JaEa4JzMdjlDhsmOwA1gvvcqbxL116gwh/2jZh7PwtIKqzP1LG+c7uWF9gyKftS0R4M0g2tOFj03IOg/3IyRnAWUb0JfFygbuwnQoATP/8xLg2SNA8vFex/eOg7RUHbuTMT4fQiXRbMa8OQ9E+u6zKPGjZYv1ulssGV+aai90VQ0etAb7wSvvvjKt39ALTQhzpfAXYbav2Vguq76Og8O/hboTITCrq6nU1L8dFc+st5LE7SH56oWk+81TEj6+YM693EZaqeAH1ukbfgmI+G2KX7VwIAEKBD+/UwIkiMnsE9kghnuaj7a4wisyWxNtZH1nDULz5RfgVLzqswoSthN4tVeqfuJAUEvuWdAc54qbQ6a3ekq0fNWUVMIyI7u1DMUCilweGlSvNVtnOXpt88Jse+y9ntaG9IkyW4Hs72ZlBjKckb2nCEwAfIyi92q585cg9Zhg/p+ZR5Zjx0ZiEpAoxrG7JfrqZDzGrH6+C6UjJZVaAhQ6NlsIf0Zts6em1dAiv65DZcwIGWaKzlU9URMdmsIgF0/avWcDn1XEGlg7wjKYZToXG/ZZO9crthNog2k1ZWAtpaMq2pS1u4+AeQZTl3FUDaQsLtTlP9iIfoG6e2XAJMVD2gK0Hy6gqNelmvtQye5TEwhyGg46SiBZv5uQ8Mii/X8dHZQM6rB0Wx+39SIhM/ppVD5nsVmwYg8moGufH8J39W3PLuXJ0+//u/S1EkBnmAMocrWWTNAhM3Ew++L1CtSAaR9/VJC+6I6YOtlSRcj27Cx2kqyjnBP6Pa6aS92QLvppLY0wG1uw/7rKbabKZcz8Y0fhye2Hq5OU+uoS6Gj1n fUWD944P Pn8emtywqB4A0eJuM9wWgb5q9gC7z65VlzpR8L4ve56xuwoojSFHf+EEXeqpwf7v6qv5xh+lAJQiK0nhcBWxc2YBDaOneReoZ8lP9MhJafbyKcOQcvrYlZEFDxNjGzRJrD3rg89lx8pYW8X2h7tLOuZR+uTG0h77abfunvRIetBipz1ojakN0ZcazSB1DzdvfP931psBPzkaGIn3alxioqUNcHIZg8JDANlPLSCY0PRKgOErOJV5aMvqzlFt+RoDJJrkdVJVR0TRb+d3S+iwTXIFWGNdoEvn5BMM/3je4NraW9HL5K0BlFLQGRZz4sJgPi6U+yHYzzSpW86ppMC7DoNLRxP65ZJL0fKfSBJhpLkLqsj9fgZLhGkb7ZQxmxkgCe7tvolOwP4LSjMQcZFj+RHE5BVe3UfwbZFjYuBHwpBWPdPIpsv0LBs9/GLllZQO8pZ0iBz16QQS2dOuNwXBe1MPFXPcGS1kZSXtHkNU6iT3wV+RgORwN1YC2JAwv3Dy5Y08vDAcXCBjoR5tRDs3vdLbOsZ/G0skf7avq3qpukKNc050jI8hhdp2ydw== 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. 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