Commit 1fd937bd7583e618df0528f0268b210f265d6910
Committed by
Trond Myklebust
1 parent
6296556f0b
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
NFS41: send real read size in layoutget
For buffer read, use offst-to-isize. For direct read, use dreq->bytes_left. Signed-off-by: Peng Tao <tao.peng@emc.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Showing 1 changed file with 9 additions and 1 deletions Side-by-side Diff
fs/nfs/pnfs.c
... | ... | @@ -1220,16 +1220,24 @@ |
1220 | 1220 | void |
1221 | 1221 | pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req) |
1222 | 1222 | { |
1223 | + u64 rd_size = req->wb_bytes; | |
1224 | + | |
1223 | 1225 | BUG_ON(pgio->pg_lseg != NULL); |
1224 | 1226 | |
1225 | 1227 | if (req->wb_offset != req->wb_pgbase) { |
1226 | 1228 | nfs_pageio_reset_read_mds(pgio); |
1227 | 1229 | return; |
1228 | 1230 | } |
1231 | + | |
1232 | + if (pgio->pg_dreq == NULL) | |
1233 | + rd_size = i_size_read(pgio->pg_inode) - req_offset(req); | |
1234 | + else | |
1235 | + rd_size = nfs_dreq_bytes_left(pgio->pg_dreq); | |
1236 | + | |
1229 | 1237 | pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, |
1230 | 1238 | req->wb_context, |
1231 | 1239 | req_offset(req), |
1232 | - req->wb_bytes, | |
1240 | + rd_size, | |
1233 | 1241 | IOMODE_READ, |
1234 | 1242 | GFP_KERNEL); |
1235 | 1243 | /* If no lseg, fall back to read through mds */ |