Re: [PATCH 2/2] fs/dax: Make dax_layout_busy_page_range() static
From: Jan Kara
Date: Mon Sep 07 2026 - 04:26:32 EST
On Fri 04-09-26 23:27:49, Kaitao Cheng wrote:
> From: Kaitao Cheng <chengkaitao@xxxxxxxxxx>
>
> dax_layout_busy_page_range() no longer has callers outside fs/dax.c.
> Keeping the range helper exported unnecessarily exposes a low-level
> implementation detail.
>
> Make the helper static and remove its export and header definitions.
>
> Also fix the stale dax_layout_busy_page_range() comment to match the
> implementation.
>
> Signed-off-by: Kaitao Cheng <chengkaitao@xxxxxxxxxx>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
> fs/dax.c | 18 ++++++++----------
> include/linux/dax.h | 6 ------
> 2 files changed, 8 insertions(+), 16 deletions(-)
>
> diff --git a/fs/dax.c b/fs/dax.c
> index 1e19e4a354ce..c6ad9533aa54 100644
> --- a/fs/dax.c
> +++ b/fs/dax.c
> @@ -770,24 +770,23 @@ static void *grab_mapping_entry(struct xa_state *xas,
>
> /**
> * dax_layout_busy_page_range - find first pinned page in @mapping
> - * @mapping: address space to scan for a page with ref count > 1
> + * @mapping: address space to scan for a pinned page
> * @start: Starting offset. Page containing 'start' is included.
> * @end: End offset. Page containing 'end' is included. If 'end' is LLONG_MAX,
> * pages from 'start' till the end of file are included.
> *
> - * DAX requires ZONE_DEVICE mapped pages. These pages are never
> - * 'onlined' to the page allocator so they are considered idle when
> - * page->count == 1. A filesystem uses this interface to determine if
> - * any page in the mapping is busy, i.e. for DMA, or other
> - * get_user_pages() usages.
> + * DAX requires ZONE_DEVICE mapped pages. A page is considered busy when
> + * folio_ref_count(folio) exceeds folio_mapcount(folio). This helper is
> + * used to determine if any page in the mapping is busy, i.e. for DMA,
> + * or other get_user_pages() usages.
> *
> * It is expected that the filesystem is holding locks to block the
> * establishment of new mappings in this address_space. I.e. it expects
> - * to be able to run unmap_mapping_range() and subsequently not race
> + * to be able to run unmap_mapping_pages() and subsequently not race
> * mapping_mapped() becoming true.
> */
> -struct page *dax_layout_busy_page_range(struct address_space *mapping,
> - loff_t start, loff_t end)
> +static struct page *dax_layout_busy_page_range(struct address_space *mapping,
> + loff_t start, loff_t end)
> {
> void *entry;
> unsigned int scanned = 0;
> @@ -839,7 +838,6 @@ struct page *dax_layout_busy_page_range(struct address_space *mapping,
> xas_unlock_irq(&xas);
> return page;
> }
> -EXPORT_SYMBOL_GPL(dax_layout_busy_page_range);
>
> static int __dax_invalidate_entry(struct address_space *mapping,
> pgoff_t index, bool trunc)
> diff --git a/include/linux/dax.h b/include/linux/dax.h
> index 05e59e45a1c2..f2d47975d905 100644
> --- a/include/linux/dax.h
> +++ b/include/linux/dax.h
> @@ -155,7 +155,6 @@ int dax_writeback_mapping_range(struct address_space *mapping,
> struct dax_device *dax_dev, struct writeback_control *wbc);
> int dax_folio_reset_order(struct folio *folio);
>
> -struct page *dax_layout_busy_page_range(struct address_space *mapping, loff_t start, loff_t end);
> dax_entry_t dax_lock_folio(struct folio *folio);
> void dax_unlock_folio(struct folio *folio, dax_entry_t cookie);
> dax_entry_t dax_lock_mapping_entry(struct address_space *mapping,
> @@ -172,11 +171,6 @@ static inline int fs_dax_get(struct dax_device *dax_dev, void *holder,
> {
> return -EOPNOTSUPP;
> }
> -static inline struct page *dax_layout_busy_page_range(struct address_space *mapping, pgoff_t start, pgoff_t nr_pages)
> -{
> - return NULL;
> -}
> -
> static inline int dax_writeback_mapping_range(struct address_space *mapping,
> struct dax_device *dax_dev, struct writeback_control *wbc)
> {
> --
> 2.50.1 (Apple Git-155)
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR