forked from Minki/linux
NFS: Fix attribute bitmask in _nfs42_proc_fallocate()
We can't use nfs4_fattr_bitmap as a bitmask, because it hasn't been
filtered to represent the attributes supported by the server. Instead,
let's revert to using server->cache_consistency_bitmask after adding in
the missing SPACE_USED attribute.
Fixes: 913eca1aea
("NFS: Fallocate should use the nfs4_fattr_bitmap")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
332d1a0373
commit
e99812e138
@ -46,11 +46,12 @@ static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep,
|
||||
{
|
||||
struct inode *inode = file_inode(filep);
|
||||
struct nfs_server *server = NFS_SERVER(inode);
|
||||
u32 bitmask[3];
|
||||
struct nfs42_falloc_args args = {
|
||||
.falloc_fh = NFS_FH(inode),
|
||||
.falloc_offset = offset,
|
||||
.falloc_length = len,
|
||||
.falloc_bitmask = nfs4_fattr_bitmap,
|
||||
.falloc_bitmask = bitmask,
|
||||
};
|
||||
struct nfs42_falloc_res res = {
|
||||
.falloc_server = server,
|
||||
@ -68,6 +69,10 @@ static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep,
|
||||
return status;
|
||||
}
|
||||
|
||||
memcpy(bitmask, server->cache_consistency_bitmask, sizeof(bitmask));
|
||||
if (server->attr_bitmask[1] & FATTR4_WORD1_SPACE_USED)
|
||||
bitmask[1] |= FATTR4_WORD1_SPACE_USED;
|
||||
|
||||
res.falloc_fattr = nfs_alloc_fattr();
|
||||
if (!res.falloc_fattr)
|
||||
return -ENOMEM;
|
||||
@ -75,7 +80,8 @@ static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep,
|
||||
status = nfs4_call_sync(server->client, server, msg,
|
||||
&args.seq_args, &res.seq_res, 0);
|
||||
if (status == 0)
|
||||
status = nfs_post_op_update_inode(inode, res.falloc_fattr);
|
||||
status = nfs_post_op_update_inode_force_wcc(inode,
|
||||
res.falloc_fattr);
|
||||
|
||||
kfree(res.falloc_fattr);
|
||||
return status;
|
||||
|
Loading…
Reference in New Issue
Block a user