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 2B6F2C8302B for ; Mon, 30 Jun 2025 14:42:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A95476B00C9; Mon, 30 Jun 2025 10:42:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A449D6B00D1; Mon, 30 Jun 2025 10:42:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8E5AE6B00D8; Mon, 30 Jun 2025 10:42:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 7CCBD6B00C9 for ; Mon, 30 Jun 2025 10:42:34 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 4CCA4BA388 for ; Mon, 30 Jun 2025 14:42:34 +0000 (UTC) X-FDA: 83612333028.05.744384B Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf07.hostedemail.com (Postfix) with ESMTP id 225CC4000A for ; Mon, 30 Jun 2025 14:42:31 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=vT5nk7U2; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="pGILP/Nw"; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=vT5nk7U2; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="pGILP/Nw"; dmarc=pass (policy=none) header.from=suse.de; spf=pass (imf07.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.130 as permitted sender) smtp.mailfrom=osalvador@suse.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751294552; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=2K/Grp0pf+YGAmhL32U2P7mtv8DTunlS/1iRZeZXLDU=; b=WCgQ6DyrabwIMsZpOI7oIrvloD5KvcXR0wrc+1p/ydaTX3tcwk39KL4a3cUz6Y6AIu3Hxx OnkztaUP7CnUhtbP3i3U5IvxAHjxnlmYELGrFJq35s6IAUmWaBsiZ1L271HqInEI1yg2P0 PHocDZ7X0qMrn1Yn4LSbq5mGdRqksVo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751294552; a=rsa-sha256; cv=none; b=y1SG7UMKa9z14kL9IRfAvXp90M5RD5jMulKlYfN9bFrJwAzGcuQPL9dlbIEeOTBf0HjSlV xm/JoN2p+WUt/2+whdBcS/SThOEJGtYKm4C00zRw1wk50dUIT1wtvzGzaTVmdDCRuANzn4 V+ACS+PJcixydPRk0nTpjBnYKJoWQIk= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=vT5nk7U2; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="pGILP/Nw"; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=vT5nk7U2; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="pGILP/Nw"; dmarc=pass (policy=none) header.from=suse.de; spf=pass (imf07.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.130 as permitted sender) smtp.mailfrom=osalvador@suse.de Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 9D7F021166; Mon, 30 Jun 2025 14:42:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1751294537; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2K/Grp0pf+YGAmhL32U2P7mtv8DTunlS/1iRZeZXLDU=; b=vT5nk7U2x5sYGl1gHXXtdT1TZ/nzdJ/nN9pctW1RRt3saa9YMiBLhcPSNg2xCgcFGm7QL3 Cjv36Jg1cL/tyKTZlwQTjbVdFJ6zUNcTlj6aV0QL14TnppRVC5q4/tSFPbpy8aaL5NWSWB i69yoxhkaqV2NFH/pL/HugKoHzA/ER0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1751294537; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2K/Grp0pf+YGAmhL32U2P7mtv8DTunlS/1iRZeZXLDU=; b=pGILP/NwSeRJXhT9aK+GyG6qi3045fMfm8doOLh8QXNYLyYVDRM1rWFJpcsJsgGv4QtKrI cdJxjiFxsCJHFpBw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1751294537; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2K/Grp0pf+YGAmhL32U2P7mtv8DTunlS/1iRZeZXLDU=; b=vT5nk7U2x5sYGl1gHXXtdT1TZ/nzdJ/nN9pctW1RRt3saa9YMiBLhcPSNg2xCgcFGm7QL3 Cjv36Jg1cL/tyKTZlwQTjbVdFJ6zUNcTlj6aV0QL14TnppRVC5q4/tSFPbpy8aaL5NWSWB i69yoxhkaqV2NFH/pL/HugKoHzA/ER0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1751294537; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2K/Grp0pf+YGAmhL32U2P7mtv8DTunlS/1iRZeZXLDU=; b=pGILP/NwSeRJXhT9aK+GyG6qi3045fMfm8doOLh8QXNYLyYVDRM1rWFJpcsJsgGv4QtKrI cdJxjiFxsCJHFpBw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 1E6F41399F; Mon, 30 Jun 2025 14:42:17 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id MJCfBEmiYmjqdAAAD6G6ig (envelope-from ); Mon, 30 Jun 2025 14:42:17 +0000 From: Oscar Salvador To: Andrew Morton Cc: David Hildenbrand , Muchun Song , Peter Xu , Gavin Guo , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Oscar Salvador Subject: [PATCH v4 2/5] mm,hugetlb: sort out folio locking in the faulting path Date: Mon, 30 Jun 2025 16:42:09 +0200 Message-ID: <20250630144212.156938-3-osalvador@suse.de> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250630144212.156938-1-osalvador@suse.de> References: <20250630144212.156938-1-osalvador@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Stat-Signature: rhtgrq5is7oy8hmcx3zdp313c4dd1s4q X-Rspamd-Queue-Id: 225CC4000A X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1751294551-819100 X-HE-Meta: U2FsdGVkX1/i4u21P9z8h7kazn/4wtrpZ6kMod2pRJALAIR5yCAwqaWWM+nAjw7dwEaPmrtMKaj7X3F+UZtZs4joR0UpBCXTGfI/JTrTfbmlxc5e6ogWUOGgIHwqEur+XUcJ5msZp+OISA42HpxxfEVsKhI85mgPTqxDHTAS4cramlsLoroB8gkWZZU6DffZUjtOSxcWr3mldK/dKUMDd2WziBUi6XzkNBwhoAgnKE51Y524Bd1wZ+FTouXt/cDTO7qZPzoTPK+lFAX+jg0dr5Nvog3WGCE+/R8TgkMDeg3RUL7hZDbI0+7luh8XcPGiAVwO0VXOsLAMAbvTTw95WqKbptFFvunN/1Pb5k2XPrgpv7hyXAZKB22Je6HDoj7B2GC6mDZzm/pV8ov3EHouWU0ZxCpGFtxnKqKZ+PndPZUEN/0wAkLGQOZwWY2NFglbtpaKntL6MYgYtl63qow0YimPSeRyZB0c/RPfFXvojlh3PdWa7EVGjCsD5U1SSFYTCJ+KC0/ntP/cF/0VrW5uwd5LuFjTLcJDKKXfWqdnhOqtR0293/gjzmAO4jIhpECK3pps0FTRXS9YtBsyGqt6EIhUBzzKCSXVF34Vdlp4GYbVkhAzWAEucDksUAHFwR9l0RsTDjFiVC+KaB93T370ggTWNfUMUl7guvffimNUc0qOlFlajZYfG5mJ078yZEH4qxH2NIY7R05yh2pS/A3d1xdypY+upXhTfRZE4P61DquEo91wPyeET7KKc1RHu1X9zCePGUQAJ/lbv4Xm/dTr3hVgi2ikYwuGfHwR/fkMmeRushd05Y3Q2i0tca71jJ1lgq0ysnl106B7zi8zG/Cys8I9IGmgpTVszqoiDveX7KixuqZsz+bE0EfSvFT6w4WZC8POVTU+W97JAueWOuJUsOlXZJVeqigLSkWdrV6rrnBC5kYpORqeYgSQnGAObhvwpDMp6tL3rRPAg5eQYAE 7lns8pVY hE3LiTTfdmDVJrn4fWuEhbfPXyGUDL723NTDI3uRW53sYFu/HHWAOhSilgZ4HFMgLiGEJfbzPZmqHpVCnhH4yENmCca0xEYnxQbvxXVfFmY/mQN8WzLZI+2T+xIV5r8jejGZ4sZqWALfpE+HxnE29L/nq7ZzKYDKMAthMSA51I5d0zmSpvmQiW0yWJlWBog81KCwTEErNs7/7eDrF5SzhCq5XCARLse8cTevVeKd25T/Nm99UPTbGhpFYCa4uF/6AJHzAQYZCTBQ4xbxsrweDvaZVdxVrbxykTT7hHLHSzRS/6bBH8nrF4jkR8DM0gXAmfPhhSTrhN2N1kkZHqZagyuzvKiwv+eLRK9sHk+bY2tCmng/eDRKIbcLFBy4FTh4N2lhY5jmtleu9aJiWO8qDgrs5dZf1I9HqDwnxQ59cdbsxMmWuEnRvMw82UgB8RJIOMz4TuzVqXnnFTHI= 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: Recent conversations showed that there was a misunderstanding about why we were locking the folio prior to call in hugetlb_wp(). In fact, as soon as we have the folio mapped into the pagetables, we no longer need to hold it locked, because we know that no concurrent truncation could have happened. There is only one case where the folio needs to be locked, and that is when we are handling an anonymous folio, because hugetlb_wp() will check whether it can re-use it exclusively for the process that is faulting it in. So, pass the folio locked to hugetlb_wp() when that is the case. Link: https://lkml.kernel.org/r/20250627102904.107202-3-osalvador@suse.de Signed-off-by: Oscar Salvador Suggested-by: David Hildenbrand Cc: Gavin Guo Cc: Muchun Song Cc: Peter Xu Signed-off-by: Andrew Morton --- mm/hugetlb.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 14274a02dd14..31d39e2a0879 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -6434,6 +6434,7 @@ static vm_fault_t hugetlb_no_page(struct address_space *mapping, pte_t new_pte; bool new_folio, new_pagecache_folio = false; u32 hash = hugetlb_fault_mutex_hash(mapping, vmf->pgoff); + bool folio_locked = true; /* * Currently, we are forced to kill the process in the event the @@ -6599,6 +6600,14 @@ static vm_fault_t hugetlb_no_page(struct address_space *mapping, hugetlb_count_add(pages_per_huge_page(h), mm); if ((vmf->flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) { + /* + * No need to keep file folios locked. See comment in + * hugetlb_fault(). + */ + if (!anon_rmap) { + folio_locked = false; + folio_unlock(folio); + } /* Optimization, do the COW without a second fault */ ret = hugetlb_wp(vmf); } @@ -6613,7 +6622,8 @@ static vm_fault_t hugetlb_no_page(struct address_space *mapping, if (new_folio) folio_set_hugetlb_migratable(folio); - folio_unlock(folio); + if (folio_locked) + folio_unlock(folio); out: hugetlb_vma_unlock_read(vma); @@ -6801,15 +6811,20 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, if (flags & (FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE)) { if (!huge_pte_write(vmf.orig_pte)) { - /* hugetlb_wp() requires page locks of pte_page(vmf.orig_pte) */ + /* + * Anonymous folios need to be lock since hugetlb_wp() + * checks whether we can re-use the folio exclusively + * for us in case we are the only user of it. + */ folio = page_folio(pte_page(vmf.orig_pte)); - if (!folio_trylock(folio)) { + if (folio_test_anon(folio) && !folio_trylock(folio)) { need_wait_lock = true; goto out_ptl; } folio_get(folio); ret = hugetlb_wp(&vmf); - folio_unlock(folio); + if (folio_test_anon(folio)) + folio_unlock(folio); folio_put(folio); goto out_ptl; } else if (likely(flags & FAULT_FLAG_WRITE)) { -- 2.50.0