On 7/10/18 2:10 PM, Ross Zwisler wrote: > 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 <ross.zwisler@xxxxxxxxxxxxxxx> > Reviewed-by: Jan Kara <jack@xxxxxxx> Hi Ted, hadn't seem feedback from you on this by the time it gathered reviews, is this something you plan to merge for realz? (I see it's on your dev branch now, just not sure of its permanence at this point.) Thanks, -Eric > --- > fs/dax.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/fs/dax.c b/fs/dax.c > index 641192808bb6..897b51e41d8f 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -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); > @@ -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++; >