Skip to content

Commit 34bf20c

Browse files
Trond Myklebustamschuma-ntap
authored andcommitted
NFSv42: Fallocate and clone should also request 'blocks used'
Both fallocate and clone can end up updating the blocks used attribute. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
1 parent 8584728 commit 34bf20c

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

fs/nfs/nfs42proc.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep,
4646
{
4747
struct inode *inode = file_inode(filep);
4848
struct nfs_server *server = NFS_SERVER(inode);
49-
u32 bitmask[3];
49+
u32 bitmask[NFS_BITMASK_SZ];
5050
struct nfs42_falloc_args args = {
5151
.falloc_fh = NFS_FH(inode),
5252
.falloc_offset = offset,
@@ -69,9 +69,8 @@ static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep,
6969
return status;
7070
}
7171

72-
memcpy(bitmask, server->cache_consistency_bitmask, sizeof(bitmask));
73-
if (server->attr_bitmask[1] & FATTR4_WORD1_SPACE_USED)
74-
bitmask[1] |= FATTR4_WORD1_SPACE_USED;
72+
nfs4_bitmask_set(bitmask, server->cache_consistency_bitmask, inode,
73+
NFS_INO_INVALID_BLOCKS);
7574

7675
res.falloc_fattr = nfs_alloc_fattr();
7776
if (!res.falloc_fattr)
@@ -1044,13 +1043,14 @@ static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f,
10441043
struct inode *src_inode = file_inode(src_f);
10451044
struct inode *dst_inode = file_inode(dst_f);
10461045
struct nfs_server *server = NFS_SERVER(dst_inode);
1046+
__u32 dst_bitmask[NFS_BITMASK_SZ];
10471047
struct nfs42_clone_args args = {
10481048
.src_fh = NFS_FH(src_inode),
10491049
.dst_fh = NFS_FH(dst_inode),
10501050
.src_offset = src_offset,
10511051
.dst_offset = dst_offset,
10521052
.count = count,
1053-
.dst_bitmask = server->cache_consistency_bitmask,
1053+
.dst_bitmask = dst_bitmask,
10541054
};
10551055
struct nfs42_clone_res res = {
10561056
.server = server,
@@ -1079,6 +1079,9 @@ static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f,
10791079
if (!res.dst_fattr)
10801080
return -ENOMEM;
10811081

1082+
nfs4_bitmask_set(dst_bitmask, server->cache_consistency_bitmask,
1083+
dst_inode, NFS_INO_INVALID_BLOCKS);
1084+
10821085
status = nfs4_call_sync(server->client, server, msg,
10831086
&args.seq_args, &res.seq_res, 0);
10841087
trace_nfs4_clone(src_inode, dst_inode, &args, status);

0 commit comments

Comments
 (0)