From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B1E526A0DB for ; Wed, 26 Nov 2025 09:56:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764151001; cv=none; b=RZRvIe1vfBsu4HVor2CeqnE8RlhM+T8MCmJFc86HLLv0SYIeYTettqqYP2puB+P6ln/1MNIlF/FWMMZKEngxTNUyRcdyVO7psaFXXgqmje73w2UTNjBkC4m8tej+90EM8yxTutqcXxwkmAHTmd+EQGgbS1gS4mC7a+P4OECxJhs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764151001; c=relaxed/simple; bh=41XEjJVavDVOl4dTQpdEXBQHgHzpx6J2pJkRqHXfIrk=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=BvQvmIw/kHkhliWRz6RgHTkERjk5nWzjwAXYIL3fqi0jpxrRbhcpnnyX4LL3STJ3gLdnfUI1alszIOVmcuLRL4/Q4mFwTZltldobwl/WNaWyybKr/Tn0YgTQVCdLI/5Qo/eFDSSWcU7PHLb5H0kiP6qLqGW2rQjHXlF+BJ824jY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GdHsAivm; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GdHsAivm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26D20C113D0; Wed, 26 Nov 2025 09:56:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1764151000; bh=41XEjJVavDVOl4dTQpdEXBQHgHzpx6J2pJkRqHXfIrk=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=GdHsAivmycdVjGG7EiJcYHPtS392UcyW5xx8cL3+AgKXJz1002rLoU91wlx+tWCuQ gCt3p/+tq2jiyDc0Eo/ugxza3rSor0xF+Kt7uE6xGUqTN3kqv8dT6N5I1Oaorcdk1V jaLUNHjEnYjgmEChNS9Bq6ibtYbPhWBrQ6T4PcHXZ2KUU6uQllloZu2HHwwHW51QhQ hOpTP79nYv0TSTuQeY499d2nEw9J1KvHNoS6b0RVEzmkk5h8BKYlI5gen+9456f8wm u9pF7ibHtrxioX021BFFD7ebLinMrfSvAhAz+AofbdvqXPAAfPlfZSXyx999L7Zooo cjFZfc+lGuu9A== Message-ID: <71b8c4ab-3f4f-4b45-a9ea-706871463a83@kernel.org> Date: Wed, 26 Nov 2025 10:56:35 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 2/4] mm/huge_memory: replace can_split_folio() with direct refcount calculation To: Zi Yan , Lorenzo Stoakes Cc: Andrew Morton , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Miaohe Lin , Naoya Horiguchi , Wei Yang , Balbir Singh , linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20251126035008.1919461-1-ziy@nvidia.com> <20251126035008.1919461-3-ziy@nvidia.com> From: "David Hildenbrand (Red Hat)" Content-Language: en-US In-Reply-To: <20251126035008.1919461-3-ziy@nvidia.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > static int __folio_freeze_and_split_unmapped(struct folio *folio, unsigned int new_order, > struct page *split_at, struct xa_state *xas, > struct address_space *mapping, bool do_lru, > struct list_head *list, enum split_type split_type, > - pgoff_t end, int *nr_shmem_dropped, int extra_pins) > + pgoff_t end, int *nr_shmem_dropped) > { > struct folio *end_folio = folio_next(folio); > struct folio *new_folio, *next; > @@ -3782,7 +3773,7 @@ static int __folio_freeze_and_split_unmapped(struct folio *folio, unsigned int n > VM_WARN_ON_ONCE(!mapping && end); > /* Prevent deferred_split_scan() touching ->_refcount */ > ds_queue = folio_split_queue_lock(folio); > - if (folio_ref_freeze(folio, 1 + extra_pins)) { > + if (folio_ref_freeze(folio, folio_cache_ref_count(folio) + 1)) { > struct swap_cluster_info *ci = NULL; > struct lruvec *lruvec; > int expected_refs; > @@ -3853,7 +3844,7 @@ static int __folio_freeze_and_split_unmapped(struct folio *folio, unsigned int n > > zone_device_private_split_cb(folio, new_folio); > > - expected_refs = folio_expected_ref_count(new_folio) + 1; > + expected_refs = folio_cache_ref_count(new_folio) + 1; > folio_ref_unfreeze(new_folio, expected_refs); > > if (do_lru) > @@ -3897,7 +3888,7 @@ static int __folio_freeze_and_split_unmapped(struct folio *folio, unsigned int n > * Otherwise, a parallel folio_try_get() can grab @folio > * and its caller can see stale page cache entries. > */ > - expected_refs = folio_expected_ref_count(folio) + 1; > + expected_refs = folio_cache_ref_count(folio) + 1; > folio_ref_unfreeze(folio, expected_refs); Can we just get rid of the expected_refs variable as well? Apart from that LGTM, thanks! Acked-by: David Hildenbrand (Red Hat) -- Cheers David