libosd: osd_req_read_sg, optimize the single entry case
PATCH 1/1 libosd: osd_req_read_sg, optimize the single entry case
Since sg-read is a bidi operation, it is a gain to convert a single sg entry into a regular read. Better do this in the generic layer then force each caller to do so.
Signed-off-by Boaz Harrosh <[email protected]>
--- drivers/scsi/osd/osd_initiator.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-)
drivers/scsi/osd/osd_initiator.c +16 -4
@@ -1005,11 +1005,23 @@ int osd_req_read_sg(struct osd_request *or, const struct osd_sg_entry *sglist, unsigned numentries) { u64 len; -int ret =_add_sg_continuation_descriptor (or, sglist, numentries, &len); +u64 off; +int ret; -if (ret) -return ret; -osd_req_read (or, obj,0 , bio, len); +if (numentries >1 ) { + off =0 ; + ret =_add_sg_continuation_descriptor (or, sglist, numentries, + &len); +if (ret) +return ret; + }else { +/* Optimize the case of single segment, read_sg is a +* bidi operation. +*/ + len = sglist->len; + off = sglist->offset; + } +osd_req_read (or, obj, off, bio, len);return 0 ; }
Signature · 1 line
1.7.2.3
Quoted 32 lines · Boaz Harrosh
Since sg-read is a bidi operation, it is a gain to convert a single sg entry into a regular read. Better do this in the generic layer then force each caller to do so.
Signed-off-by Boaz Harrosh <[email protected]>--- drivers/scsi/osd/osd_initiator.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-)drivers/scsi/osd/osd_initiator.c +9
-4@@ -1005,11 +1005,23 @@ int osd_req_read_sg(struct osd_request *or, const struct osd_sg_entry *sglist, unsigned numentries) { u64 len; -int ret =_add_sg_continuation_descriptor (or, sglist, numentries, &len); +u64 off; +int ret; -if (ret) -return ret; -osd_req_read (or, obj,0 , bio, len); +if (numentries >1 ) { + off =0 ; + ret =_add_sg_continuation_descriptor (or, sglist, numentries, + &len); +if (ret) +return ret; + }else {
drivers/scsi/osd/osd_initiator.c int osd_req_read_sg(struct osd_request *or, · line 1027
Quoted 10 lines
drivers/scsi/osd/osd_initiator.c +7
-0+/* Optimize the case of single segment, read_sg is a +* bidi operation. +*/ + len = sglist->len; + off = sglist->offset; + } +osd_req_read (or, obj, off, bio, len);return 0 ; }
James please include this patch into scsi-misc for the next merge window.
Thanks
Boaz