Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8850df99 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent c4812998
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -727,8 +727,8 @@ static int nfs3_read_done(struct rpc_task *task, struct nfs_read_data *data)
{
	if (nfs3_async_handle_jukebox(task, data->inode))
		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);
	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -2396,6 +2396,8 @@ static int nfs4_read_done(struct rpc_task *task, struct nfs_read_data *data)
		rpc_restart_call(task);
		return -EAGAIN;
	}

	nfs_invalidate_atime(data->inode);
	if (task->tk_status > 0)
		renew_lease(server, data->timestamp);
	return 0;
+1 −0
Original line number Diff line number Diff line
@@ -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)
{
	nfs_invalidate_atime(data->inode);
	if (task->tk_status >= 0) {
		nfs_refresh_inode(data->inode, data->res.fattr);
		/* Emulate the eof flag, which isn't normally needed in NFSv2
+0 −3
Original line number Diff line number Diff line
@@ -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));
		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;
}