|
@@ -786,6 +786,7 @@ nfs3_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,
|
|
static int nfs3_read_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
|
|
static int nfs3_read_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
|
|
{
|
|
{
|
|
struct inode *inode = hdr->inode;
|
|
struct inode *inode = hdr->inode;
|
|
|
|
+ struct nfs_server *server = NFS_SERVER(inode);
|
|
|
|
|
|
if (hdr->pgio_done_cb != NULL)
|
|
if (hdr->pgio_done_cb != NULL)
|
|
return hdr->pgio_done_cb(task, hdr);
|
|
return hdr->pgio_done_cb(task, hdr);
|
|
@@ -793,6 +794,9 @@ static int nfs3_read_done(struct rpc_task *task, struct nfs_pgio_header *hdr)
|
|
if (nfs3_async_handle_jukebox(task, inode))
|
|
if (nfs3_async_handle_jukebox(task, inode))
|
|
return -EAGAIN;
|
|
return -EAGAIN;
|
|
|
|
|
|
|
|
+ if (task->tk_status >= 0 && !server->read_hdrsize)
|
|
|
|
+ cmpxchg(&server->read_hdrsize, 0, hdr->res.replen);
|
|
|
|
+
|
|
nfs_invalidate_atime(inode);
|
|
nfs_invalidate_atime(inode);
|
|
nfs_refresh_inode(inode, &hdr->fattr);
|
|
nfs_refresh_inode(inode, &hdr->fattr);
|
|
return 0;
|
|
return 0;
|
|
@@ -802,6 +806,7 @@ static void nfs3_proc_read_setup(struct nfs_pgio_header *hdr,
|
|
struct rpc_message *msg)
|
|
struct rpc_message *msg)
|
|
{
|
|
{
|
|
msg->rpc_proc = &nfs3_procedures[NFS3PROC_READ];
|
|
msg->rpc_proc = &nfs3_procedures[NFS3PROC_READ];
|
|
|
|
+ hdr->args.replen = NFS_SERVER(hdr->inode)->read_hdrsize;
|
|
}
|
|
}
|
|
|
|
|
|
static int nfs3_proc_pgio_rpc_prepare(struct rpc_task *task,
|
|
static int nfs3_proc_pgio_rpc_prepare(struct rpc_task *task,
|