This is a revised version of the sparse read code I posted a week or so ago. Sparse read support is required for fscrypt integration work, but may be useful on its own. The main differences from the v3 set are a couple of small bugfixes, and the addition of a new "sparseread" mount option to force the cephfs client to use sparse reads. I also renamed the sparse_ext_len field to be sparse_ext_cnt (as suggested by Xiubo). Ilya, at this point I'm mostly looking for feedback from you. Does this approach seem sound? If so, I'll plan to work on implementing the v2-secure and v1 codepaths next. These patches are currently available in the 'ceph-sparse-read-v4' tag in my kernel tree here: https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/ Jeff Layton (5): libceph: add spinlock around osd->o_requests libceph: define struct ceph_sparse_extent and add some helpers libceph: add sparse read support to msgr2 crc state machine libceph: add sparse read support to OSD client ceph: add new mount option to enable sparse reads fs/ceph/addr.c | 18 ++- fs/ceph/file.c | 51 ++++++- fs/ceph/super.c | 16 +- fs/ceph/super.h | 8 + include/linux/ceph/messenger.h | 29 ++++ include/linux/ceph/osd_client.h | 71 ++++++++- net/ceph/messenger.c | 1 + net/ceph/messenger_v2.c | 170 +++++++++++++++++++-- net/ceph/osd_client.c | 255 +++++++++++++++++++++++++++++++- 9 files changed, 593 insertions(+), 26 deletions(-) -- 2.35.1