[PATCH 15/15] afs: Use find_get_pages_range_tag()
Daniel Jordan
daniel.m.jordan at oracle.com
Fri Sep 29 14:46:45 PDT 2017
On 09/27/2017 12:03 PM, Jan Kara wrote:
> Use find_get_pages_range_tag() in afs_writepages_region() as we are
> interested only in pages from given range. Remove unnecessary code after
> this conversion.
>
> CC: David Howells <dhowells at redhat.com>
> CC: linux-afs at lists.infradead.org
> Signed-off-by: Jan Kara <jack at suse.cz>
> ---
> fs/afs/write.c | 11 ++---------
> 1 file changed, 2 insertions(+), 9 deletions(-)
>
> diff --git a/fs/afs/write.c b/fs/afs/write.c
> index 106e43db1115..d62a6b54152d 100644
> --- a/fs/afs/write.c
> +++ b/fs/afs/write.c
> @@ -497,20 +497,13 @@ static int afs_writepages_region(struct address_space *mapping,
> _enter(",,%lx,%lx,", index, end);
>
> do {
> - n = find_get_pages_tag(mapping, &index, PAGECACHE_TAG_DIRTY,
> - 1, &page);
> + n = find_get_pages_range_tag(mapping, &index, end,
> + PAGECACHE_TAG_DIRTY, 1, &page);
> if (!n)
> break;
>
> _debug("wback %lx", page->index);
>
> - if (page->index > end) {
> - *_next = index;
> - put_page(page);
> - _leave(" = 0 [%lx]", *_next);
> - return 0;
> - }
> -
> /* at this point we hold neither mapping->tree_lock nor lock on
> * the page itself: the page may be truncated or invalidated
> * (changing page->mapping to NULL), or even swizzled back from
There's also one other caller of find_get_pages_tag that could be
converted, wdata_alloc_and_fillpages. Since the 256 max mentioned in
the comment below no longer seems to apply, maybe something like this?:
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 92fdf9c35de2..4dbd24231e8a 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1963,31 +1963,14 @@ wdata_alloc_and_fillpages(pgoff_t tofind, struct
address_space *mapping,
pgoff_t end, pgoff_t *index,
unsigned int *found_pages)
{
- unsigned int nr_pages;
- struct page **pages;
- struct cifs_writedata *wdata;
-
- wdata = cifs_writedata_alloc((unsigned int)tofind,
- cifs_writev_complete);
+ struct cifs_writedata *wdata =
cifs_writedata_alloc((unsigned)tofind,
+ cifs_writev_complete);
if (!wdata)
return NULL;
- /*
- * find_get_pages_tag seems to return a max of 256 on each
- * iteration, so we must call it several times in order to
- * fill the array or the wsize is effectively limited to
- * 256 * PAGE_SIZE.
- */
- *found_pages = 0;
- pages = wdata->pages;
- do {
- nr_pages = find_get_pages_tag(mapping, index,
- PAGECACHE_TAG_DIRTY, tofind,
- pages);
- *found_pages += nr_pages;
- tofind -= nr_pages;
- pages += nr_pages;
- } while (nr_pages && tofind && *index <= end);
+ *found_pages = find_get_pages_range_tag(mapping, index, end,
+ PAGECACHE_TAG_DIRTY, tofind,
+ wdata->pages);
return wdata;
}
Otherwise the set looks good, so for the whole thing,
Reviewed-by: Daniel Jordan <daniel.m.jordan at oracle.com>
Daniel
More information about the linux-afs
mailing list