diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 5ca887bb5cae..221df531b0c3 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -784,7 +784,6 @@ static int ceph_writepages_start(struct address_space *mapping, pgoff_t index, start, end; int range_whole = 0; int should_loop = 1; - pgoff_t max_pages = 0, max_pages_ever = 0; struct ceph_snap_context *snapc = NULL, *last_snapc = NULL, *pgsnapc; struct pagevec pvec; int done = 0; @@ -808,7 +807,6 @@ static int ceph_writepages_start(struct address_space *mapping, } if (fsc->mount_options->wsize < wsize) wsize = fsc->mount_options->wsize; - max_pages_ever = wsize >> PAGE_SHIFT; pagevec_init(&pvec, 0); @@ -850,26 +848,25 @@ retry: last_snapc = snapc; while (!done && index <= end) { - unsigned i; - pgoff_t strip_unit_end = 0; int num_ops = 0, op_idx; - int pvec_pages, locked_pages = 0; + unsigned i, pvec_pages, max_pages, locked_pages = 0; struct page **pages = NULL, **data_pages; mempool_t *pool = NULL; /* Becomes non-null if mempool used */ struct page *page; - int want; + pgoff_t strip_unit_end = 0; u64 offset = 0, len = 0; - max_pages = max_pages_ever; + max_pages = wsize >> PAGE_SHIFT; get_more_pages: - want = min(end - index, - min((pgoff_t)PAGEVEC_SIZE, - max_pages - (pgoff_t)locked_pages) - 1) - + 1; + pvec_pages = min_t(unsigned, PAGEVEC_SIZE, + max_pages - locked_pages); + if (end - index < (u64)(pvec_pages - 1)) + pvec_pages = (unsigned)(end - index) + 1; + pvec_pages = pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY, - want); + pvec_pages); dout("pagevec_lookup_tag got %d\n", pvec_pages); if (!pvec_pages && !locked_pages) break;