nfs3: Round-up read reply bytes of multi-vector reply

A previos commit brought in support for returning read replies
when subvolumes return reads in multiple iovecs. This did
not completely fix the problem since the bytes in iovecs
all together could be unaligned with the 4 byte
boundary as needed by XDR for the opaque data. This resulted
in read requests being either retransmitted or rejected with
an error message in syslog on the NFS client.

Signed-off-by: Shehjar Tikoo <shehjart@dev.gluster.com>
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-09 23:13:54 +00:00 committed by Anand V. Avati
parent 80c3061c07
commit 2848a53f53
2 changed files with 2 additions and 3 deletions

View File

@ -1529,9 +1529,7 @@ nfs3_fill_read3res (read3res *res, nfsstat3 stat, count3 count,
res->read3res_u.resok.file_attributes = poa;
res->read3res_u.resok.count = count;
res->read3res_u.resok.eof = is_eof;
res->read3res_u.resok.data.data_len = xdr_length_round_up (count,
1048576);
res->read3res_u.resok.data.data_len = count;
}

View File

@ -1372,6 +1372,7 @@ nfs3_read_reply (rpcsvc_request_t *req, nfsstat3 stat, count3 count,
xlid = nfs3_request_xlator_id (req);
nfs3_fill_read3res (&res, stat, count, poststat, is_eof, xlid);
if (stat == NFS3_OK) {
xdr_vector_round_up (vec, vcount, count);
/* iob can be zero if the file size was zero. If so, op_ret
* would be 0 and count = 0.
*/