Skip to content

Commit

Permalink
dax: dax_layout_busy_page() warn on !exceptional
Browse files Browse the repository at this point in the history
Inodes using DAX should only ever have exceptional entries in their page
caches.  Make this clear by warning if the iteration in
dax_layout_busy_page() ever sees a non-exceptional entry, and by adding a
comment for the pagevec_release() call which only deals with struct page
pointers.

Signed-off-by: Ross Zwisler <[email protected]>
Signed-off-by: Theodore Ts'o <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
  • Loading branch information
Ross Zwisler authored and tytso committed Jul 29, 2018
1 parent 0694f8c commit cdbf889
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion fs/dax.c
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,8 @@ struct page *dax_layout_busy_page(struct address_space *mapping)
if (index >= end)
break;

if (!radix_tree_exceptional_entry(pvec_ent))
if (WARN_ON_ONCE(
!radix_tree_exceptional_entry(pvec_ent)))
continue;

xa_lock_irq(&mapping->i_pages);
Expand All @@ -578,6 +579,13 @@ struct page *dax_layout_busy_page(struct address_space *mapping)
if (page)
break;
}

/*
* We don't expect normal struct page entries to exist in our
* tree, but we keep these pagevec calls so that this code is
* consistent with the common pattern for handling pagevecs
* throughout the kernel.
*/
pagevec_remove_exceptionals(&pvec);
pagevec_release(&pvec);
index++;
Expand Down

0 comments on commit cdbf889

Please sign in to comment.