NFS: nfs4_bitmask_adjust() must not change the server global bitmasks
[ Upstream commit 332d1a0373be32a3a3c152756bca45ff4f4e11b5 ]
As currently set, the calls to nfs4_bitmask_adjust() will end up
overwriting the contents of the nfs_server cache_consistency_bitmask
field.
The intention here should be to modify a private copy of that mask in
the close/delegreturn/write arguments.
Fixes: 76bd5c016e
("NFSv4: make cache consistency bitmask dynamic")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
0627cbc9b8
commit
ce2b470add
@@ -15,6 +15,8 @@
|
||||
#define NFS_DEF_FILE_IO_SIZE (4096U)
|
||||
#define NFS_MIN_FILE_IO_SIZE (1024U)
|
||||
|
||||
#define NFS_BITMASK_SZ 3
|
||||
|
||||
struct nfs4_string {
|
||||
unsigned int len;
|
||||
char *data;
|
||||
@@ -525,7 +527,8 @@ struct nfs_closeargs {
|
||||
struct nfs_seqid * seqid;
|
||||
fmode_t fmode;
|
||||
u32 share_access;
|
||||
u32 * bitmask;
|
||||
const u32 * bitmask;
|
||||
u32 bitmask_store[NFS_BITMASK_SZ];
|
||||
struct nfs4_layoutreturn_args *lr_args;
|
||||
};
|
||||
|
||||
@@ -608,7 +611,8 @@ struct nfs4_delegreturnargs {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
const struct nfs_fh *fhandle;
|
||||
const nfs4_stateid *stateid;
|
||||
u32 * bitmask;
|
||||
const u32 *bitmask;
|
||||
u32 bitmask_store[NFS_BITMASK_SZ];
|
||||
struct nfs4_layoutreturn_args *lr_args;
|
||||
};
|
||||
|
||||
@@ -648,7 +652,8 @@ struct nfs_pgio_args {
|
||||
union {
|
||||
unsigned int replen; /* used by read */
|
||||
struct {
|
||||
u32 * bitmask; /* used by write */
|
||||
const u32 * bitmask; /* used by write */
|
||||
u32 bitmask_store[NFS_BITMASK_SZ]; /* used by write */
|
||||
enum nfs3_stable_how stable; /* used by write */
|
||||
};
|
||||
};
|
||||
|
Reference in New Issue
Block a user