On Mon, 2022-03-21 at 15:57 +0800, Xiubo Li wrote: > On 3/18/22 9:50 PM, Jeff Layton wrote: > > When the OSD sends back a sparse read reply, it contains an array of > > these structures. Define the structure and add a couple of helpers for > > dealing with them. > > > > Also add a place in struct ceph_osd_req_op to store the extent buffer, > > and code to free it if it's populated when the req is torn down. > > > > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> > > --- > > include/linux/ceph/osd_client.h | 31 ++++++++++++++++++++++++++++++- > > net/ceph/osd_client.c | 13 +++++++++++++ > > 2 files changed, 43 insertions(+), 1 deletion(-) > > > > diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h > > index 3122c1a3205f..00a5b53a6763 100644 > > --- a/include/linux/ceph/osd_client.h > > +++ b/include/linux/ceph/osd_client.h > > @@ -29,6 +29,17 @@ typedef void (*ceph_osdc_callback_t)(struct ceph_osd_request *); > > > > #define CEPH_HOMELESS_OSD -1 > > > > +/* > > + * A single extent in a SPARSE_READ reply. > > + * > > + * Note that these come from the OSD as little-endian values. On BE arches, > > + * we convert them in-place after receipt. > > + */ > > +struct ceph_sparse_extent { > > + u64 off; > > + u64 len; > > +} __attribute__((packed)); > > + > > /* > > * A given osd we're communicating with. > > * > > @@ -104,6 +115,8 @@ struct ceph_osd_req_op { > > u64 offset, length; > > u64 truncate_size; > > u32 truncate_seq; > > + int sparse_ext_len; > > To be more readable, how about > > s/sparse_ext_len/sparse_ext_cnt/ ? > > -- Xiubo > Sure, I'll make that change. -- Jeff Layton <jlayton@xxxxxxxxxx>