linux/fs/ceph
Jeff Layton 2e16929660 ceph: have ceph_writepages_start call pagevec_lookup_range_tag
Currently it calls pagevec_lookup_range_nr_tag(), but that may be
inefficient, as we might end up having to search several times as we get
down to looking for fewer pages to fill the array.

Thus spake Willy:

"I think ceph is misusing pagevec_lookup_range_nr_tag().  Let's suppose
 you get a range which is AAAAbbbbAAAAbbbbAAAAbbbbbbbb(...)bbbbAAAA and
 you try to fetch max_pages=13.  First loop will get AAAAbbbbAAAAb and
 have 8 locked_pages.  The next call will get bbbAA and now
 locked_pages=10.  Next call gets AAb ... and now you're iterating your
 way through all the 'b' one page at a time until you find that first A."

'A' here refers to pages that are eligible for writeback and 'b'
represents ones that aren't (for whatever reason).

Not capping the number of return pages may mean that we sometimes find
more pages than are needed, but the extra references will just get put
at the end.

Ceph is also the only caller of pagevec_lookup_range_nr_tag(), so this
change should allow us to eliminate that call as well. That will be done
in a follow-on patch.

Reported-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
2020-10-12 15:29:26 +02:00
..
acl.c ceph: add caps perf metric for each superblock 2020-06-01 13:22:51 +02:00
addr.c ceph: have ceph_writepages_start call pagevec_lookup_range_tag 2020-10-12 15:29:26 +02:00
cache.c ceph: replace zero-length array with flexible-array member 2020-03-30 12:42:40 +02:00
cache.h libceph, rbd, ceph: convert to use the new mount API 2019-11-27 22:28:37 +01:00
caps.c ceph: metrics for opened files, pinned caps and opened inodes 2020-10-12 15:29:26 +02:00
ceph_frag.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs.c ceph: metrics for opened files, pinned caps and opened inodes 2020-10-12 15:29:26 +02:00
dir.c ceph: add ceph_sb_to_mdsc helper support to parse the mdsc 2020-10-12 15:29:26 +02:00
export.c ceph: don't return -ESTALE if there's still an open file 2020-06-01 13:22:53 +02:00
file.c ceph: add ceph_sb_to_mdsc helper support to parse the mdsc 2020-10-12 15:29:26 +02:00
inode.c ceph: metrics for opened files, pinned caps and opened inodes 2020-10-12 15:29:26 +02:00
io.c ceph: add buffered/direct exclusionary locking for reads and writes 2019-09-16 12:06:25 +02:00
io.h ceph: add buffered/direct exclusionary locking for reads and writes 2019-09-16 12:06:25 +02:00
ioctl.c ceph: consider inode's last read/write when calculating wanted caps 2020-03-30 12:42:42 +02:00
ioctl.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Kconfig libceph: replace HTTP links with HTTPS ones 2020-08-03 11:05:26 +02:00
locks.c ceph: add ceph_sb_to_mdsc helper support to parse the mdsc 2020-10-12 15:29:26 +02:00
Makefile ceph: add dentry lease metric support 2020-06-01 13:22:51 +02:00
mds_client.c ceph: encode inodes' parent/d_name in cap reconnect message 2020-10-12 15:29:25 +02:00
mds_client.h ceph: fix inode number handling on arches with 32-bit ino_t 2020-08-24 17:25:26 +02:00
mdsmap.c ceph: remove unused variables in ceph_mdsmap_decode() 2020-08-03 11:05:27 +02:00
metric.c ceph: metrics for opened files, pinned caps and opened inodes 2020-10-12 15:29:26 +02:00
metric.h ceph: metrics for opened files, pinned caps and opened inodes 2020-10-12 15:29:26 +02:00
quota.c ceph: add ceph_sb_to_mdsc helper support to parse the mdsc 2020-10-12 15:29:26 +02:00
snap.c ceph: add ceph_sb_to_mdsc helper support to parse the mdsc 2020-10-12 15:29:26 +02:00
strings.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
super.c ceph: use kill_anon_super helper 2020-10-12 15:29:26 +02:00
super.h ceph: add ceph_sb_to_mdsc helper support to parse the mdsc 2020-10-12 15:29:26 +02:00
util.c ceph: move net/ceph/ceph_fs.c to fs/ceph/util.c 2020-01-27 16:53:40 +01:00
xattr.c ceph: remove unnecessary cast in kfree() 2020-08-03 11:05:26 +02:00