rpcsvc: Support multiple vectors during reply submission

RPC reply path allows attaching a single iovec to a reply. This limits
the replies for certain program ops which need to return multiple vectors
for eg, the NFSv3 read reply.

Signed-off-by: Shehjar Tikoo <shehjart@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>

BUG: 902 (iozone hangs during random read throughput test)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=902
This commit is contained in:
Shehjar Tikoo 2010-05-07 01:53:10 +00:00 committed by Anand V. Avati
parent c1f052da36
commit 79f8c310df
2 changed files with 30 additions and 1 deletions

View File

@ -1646,6 +1646,33 @@ rpcsvc_request_attach_vector (rpcsvc_request_t *req, struct iovec msgvec,
}
int
rpcsvc_request_attach_vectors (rpcsvc_request_t *req, struct iovec *payload,
int vcount, struct iobref *piobref)
{
int c = 0;
int ret = -1;
for (;c < (vcount-1); c++) {
ret = rpcsvc_request_attach_vector (req, payload[c], NULL,
piobref, 0);
if (ret < 0) {
gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to attach "
"vector");
goto out;
}
}
ret = rpcsvc_request_attach_vector (req, payload[vcount-1], NULL,
piobref, 1);
if (ret < 0)
gf_log (GF_RPCSVC, GF_LOG_ERROR, "Failed to attach final vec");
out:
return ret;
}
int
rpcsvc_submit_vectors (rpcsvc_request_t *req)
{

View File

@ -643,7 +643,9 @@ extern int rpcsvc_submit_vectors (rpcsvc_request_t *req);
extern int rpcsvc_request_attach_vector (rpcsvc_request_t *req,
struct iovec msgvec, struct iobuf *iob,
struct iobref *ioref, int finalvector);
extern int
rpcsvc_request_attach_vectors (rpcsvc_request_t *req, struct iovec *payload,
int vcount, struct iobref *piobref);
typedef int (*auth_init_conn) (rpcsvc_conn_t *conn, void *priv);
typedef int (*auth_init_request) (rpcsvc_request_t *req, void *priv);