|
@@ -1439,7 +1439,7 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
|
|
|
if (calldata->arg.seqid == NULL)
|
|
|
goto out_free_calldata;
|
|
|
calldata->arg.fmode = 0;
|
|
|
- calldata->arg.bitmask = server->attr_bitmask;
|
|
|
+ calldata->arg.bitmask = server->cache_consistency_bitmask;
|
|
|
calldata->res.fattr = &calldata->fattr;
|
|
|
calldata->res.seqid = calldata->arg.seqid;
|
|
|
calldata->res.server = server;
|
|
@@ -1600,6 +1600,9 @@ static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *f
|
|
|
server->caps |= NFS_CAP_HARDLINKS;
|
|
|
if (res.has_symlinks != 0)
|
|
|
server->caps |= NFS_CAP_SYMLINKS;
|
|
|
+ memcpy(server->cache_consistency_bitmask, res.attr_bitmask, sizeof(server->cache_consistency_bitmask));
|
|
|
+ server->cache_consistency_bitmask[0] &= FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE;
|
|
|
+ server->cache_consistency_bitmask[1] &= FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY;
|
|
|
server->acl_bitmask = res.acl_bitmask;
|
|
|
}
|
|
|
return status;
|
|
@@ -2079,7 +2082,7 @@ static void nfs4_proc_unlink_setup(struct rpc_message *msg, struct inode *dir)
|
|
|
struct nfs_removeargs *args = msg->rpc_argp;
|
|
|
struct nfs_removeres *res = msg->rpc_resp;
|
|
|
|
|
|
- args->bitmask = server->attr_bitmask;
|
|
|
+ args->bitmask = server->cache_consistency_bitmask;
|
|
|
res->server = server;
|
|
|
msg->rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_REMOVE];
|
|
|
}
|
|
@@ -2323,7 +2326,7 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
|
|
|
.pages = &page,
|
|
|
.pgbase = 0,
|
|
|
.count = count,
|
|
|
- .bitmask = NFS_SERVER(dentry->d_inode)->attr_bitmask,
|
|
|
+ .bitmask = NFS_SERVER(dentry->d_inode)->cache_consistency_bitmask,
|
|
|
};
|
|
|
struct nfs4_readdir_res res;
|
|
|
struct rpc_message msg = {
|
|
@@ -2552,7 +2555,7 @@ static void nfs4_proc_write_setup(struct nfs_write_data *data, struct rpc_messag
|
|
|
{
|
|
|
struct nfs_server *server = NFS_SERVER(data->inode);
|
|
|
|
|
|
- data->args.bitmask = server->attr_bitmask;
|
|
|
+ data->args.bitmask = server->cache_consistency_bitmask;
|
|
|
data->res.server = server;
|
|
|
data->timestamp = jiffies;
|
|
|
|
|
@@ -2575,7 +2578,7 @@ static void nfs4_proc_commit_setup(struct nfs_write_data *data, struct rpc_messa
|
|
|
{
|
|
|
struct nfs_server *server = NFS_SERVER(data->inode);
|
|
|
|
|
|
- data->args.bitmask = server->attr_bitmask;
|
|
|
+ data->args.bitmask = server->cache_consistency_bitmask;
|
|
|
data->res.server = server;
|
|
|
msg->rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_COMMIT];
|
|
|
}
|