NFS: Fix atime revalidation in read()
NFSv3 will correctly update atime on a read() call, so there is no need to set the NFS_INO_INVALID_ATIME flag unless the call to nfs_refresh_inode() fails. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c481299839
commit
8850df999c
4 changed files with 6 additions and 6 deletions
|
@ -727,9 +727,9 @@ static int nfs3_read_done(struct rpc_task *task, struct nfs_read_data *data)
|
||||||
{
|
{
|
||||||
if (nfs3_async_handle_jukebox(task, data->inode))
|
if (nfs3_async_handle_jukebox(task, data->inode))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
/* Call back common NFS readpage processing */
|
|
||||||
if (task->tk_status >= 0)
|
nfs_invalidate_atime(data->inode);
|
||||||
nfs_refresh_inode(data->inode, &data->fattr);
|
nfs_refresh_inode(data->inode, &data->fattr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2396,6 +2396,8 @@ static int nfs4_read_done(struct rpc_task *task, struct nfs_read_data *data)
|
||||||
rpc_restart_call(task);
|
rpc_restart_call(task);
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nfs_invalidate_atime(data->inode);
|
||||||
if (task->tk_status > 0)
|
if (task->tk_status > 0)
|
||||||
renew_lease(server, data->timestamp);
|
renew_lease(server, data->timestamp);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -552,6 +552,7 @@ nfs_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
|
|
||||||
static int nfs_read_done(struct rpc_task *task, struct nfs_read_data *data)
|
static int nfs_read_done(struct rpc_task *task, struct nfs_read_data *data)
|
||||||
{
|
{
|
||||||
|
nfs_invalidate_atime(data->inode);
|
||||||
if (task->tk_status >= 0) {
|
if (task->tk_status >= 0) {
|
||||||
nfs_refresh_inode(data->inode, data->res.fattr);
|
nfs_refresh_inode(data->inode, data->res.fattr);
|
||||||
/* Emulate the eof flag, which isn't normally needed in NFSv2
|
/* Emulate the eof flag, which isn't normally needed in NFSv2
|
||||||
|
|
|
@ -341,9 +341,6 @@ int nfs_readpage_result(struct rpc_task *task, struct nfs_read_data *data)
|
||||||
set_bit(NFS_INO_STALE, &NFS_FLAGS(data->inode));
|
set_bit(NFS_INO_STALE, &NFS_FLAGS(data->inode));
|
||||||
nfs_mark_for_revalidate(data->inode);
|
nfs_mark_for_revalidate(data->inode);
|
||||||
}
|
}
|
||||||
spin_lock(&data->inode->i_lock);
|
|
||||||
NFS_I(data->inode)->cache_validity |= NFS_INO_INVALID_ATIME;
|
|
||||||
spin_unlock(&data->inode->i_lock);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue