Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4977c825 authored by Boaz Harrosh's avatar Boaz Harrosh Committed by James Bottomley
Browse files

[SCSI] 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: default avatarBoaz Harrosh <bharrosh@panasas.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 1e34c838
Loading
Loading
Loading
Loading
+16 −4
Original line number Original line Diff line number Diff line
@@ -1005,11 +1005,23 @@ int osd_req_read_sg(struct osd_request *or,
	const struct osd_sg_entry *sglist, unsigned numentries)
	const struct osd_sg_entry *sglist, unsigned numentries)
{
{
	u64 len;
	u64 len;
	int ret = _add_sg_continuation_descriptor(or, sglist, numentries, &len);
	u64 off;
	int ret;


	if (numentries > 1) {
		off = 0;
		ret = _add_sg_continuation_descriptor(or, sglist, numentries,
						      &len);
		if (ret)
		if (ret)
			return ret;
			return ret;
	osd_req_read(or, obj, 0, bio, len);
	} 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;
	return 0;
}
}