Message ID | 20170927160334.29513-11-jack@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Sep 27, 2017 at 06:03:29PM +0200, Jan Kara wrote: > Use pagevec_lookup_range_tag() in __filemap_fdatawait_range() as it is > interested only in pages from given range. Remove unnecessary code > resulting from this. > > Signed-off-by: Jan Kara <jack@suse.cz> > --- > mm/filemap.c | 9 ++------- > 1 file changed, 2 insertions(+), 7 deletions(-) > > diff --git a/mm/filemap.c b/mm/filemap.c > index fe20329c83cd..479fc54b7cd1 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -421,18 +421,13 @@ static void __filemap_fdatawait_range(struct address_space *mapping, > > pagevec_init(&pvec, 0); > while ((index <= end) && > - (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, > - PAGECACHE_TAG_WRITEBACK, > - min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1)) != 0) { > + (nr_pages = pagevec_lookup_range_tag(&pvec, mapping, > + &index, end, PAGECACHE_TAG_WRITEBACK, PAGEVEC_SIZE))) { While touching this, can we clean this up by moving the lookup outside the while condition? i.e: while (index <= end) { unsigned i; nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end, PAGECACHE_TAG_WRITEBACK, PAGEVEC_SIZE); if (!nr_pages) break; Cheers, Dave.
On Thu 28-09-17 08:19:02, Dave Chinner wrote: > On Wed, Sep 27, 2017 at 06:03:29PM +0200, Jan Kara wrote: > > Use pagevec_lookup_range_tag() in __filemap_fdatawait_range() as it is > > interested only in pages from given range. Remove unnecessary code > > resulting from this. > > > > Signed-off-by: Jan Kara <jack@suse.cz> > > --- > > mm/filemap.c | 9 ++------- > > 1 file changed, 2 insertions(+), 7 deletions(-) > > > > diff --git a/mm/filemap.c b/mm/filemap.c > > index fe20329c83cd..479fc54b7cd1 100644 > > --- a/mm/filemap.c > > +++ b/mm/filemap.c > > @@ -421,18 +421,13 @@ static void __filemap_fdatawait_range(struct address_space *mapping, > > > > pagevec_init(&pvec, 0); > > while ((index <= end) && > > - (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, > > - PAGECACHE_TAG_WRITEBACK, > > - min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1)) != 0) { > > + (nr_pages = pagevec_lookup_range_tag(&pvec, mapping, > > + &index, end, PAGECACHE_TAG_WRITEBACK, PAGEVEC_SIZE))) { > > While touching this, can we clean this up by moving the lookup > outside the while condition? i.e: > > while (index <= end) { > unsigned i; > > nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, > end, PAGECACHE_TAG_WRITEBACK, PAGEVEC_SIZE); > if (!nr_pages) > break; Yeah, that makes sense. I'll update it. Honza
diff --git a/mm/filemap.c b/mm/filemap.c index fe20329c83cd..479fc54b7cd1 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -421,18 +421,13 @@ static void __filemap_fdatawait_range(struct address_space *mapping, pagevec_init(&pvec, 0); while ((index <= end) && - (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, - PAGECACHE_TAG_WRITEBACK, - min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1)) != 0) { + (nr_pages = pagevec_lookup_range_tag(&pvec, mapping, + &index, end, PAGECACHE_TAG_WRITEBACK, PAGEVEC_SIZE))) { unsigned i; for (i = 0; i < nr_pages; i++) { struct page *page = pvec.pages[i]; - /* until radix tree lookup accepts end_index */ - if (page->index > end) - continue; - wait_on_page_writeback(page); ClearPageError(page); }
Use pagevec_lookup_range_tag() in __filemap_fdatawait_range() as it is interested only in pages from given range. Remove unnecessary code resulting from this. Signed-off-by: Jan Kara <jack@suse.cz> --- mm/filemap.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)