diff options
-rw-r--r-- | fs/nfs/nfs4proc.c | 3 | ||||
-rw-r--r-- | fs/nfs/nfs4xdr.c | 14 | ||||
-rw-r--r-- | include/linux/nfs_xdr.h | 1 |
3 files changed, 12 insertions, 6 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 88f590feeb72..f2b92f6a7efb 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -3779,6 +3779,7 @@ static int _nfs4_proc_getlk(struct nfs4_state *state, int cmd, struct file_lock | |||
3779 | goto out; | 3779 | goto out; |
3780 | lsp = request->fl_u.nfs4_fl.owner; | 3780 | lsp = request->fl_u.nfs4_fl.owner; |
3781 | arg.lock_owner.id = lsp->ls_id.id; | 3781 | arg.lock_owner.id = lsp->ls_id.id; |
3782 | arg.lock_owner.s_dev = server->s_dev; | ||
3782 | status = nfs4_call_sync(server, &msg, &arg, &res, 1); | 3783 | status = nfs4_call_sync(server, &msg, &arg, &res, 1); |
3783 | switch (status) { | 3784 | switch (status) { |
3784 | case 0: | 3785 | case 0: |
@@ -4024,6 +4025,7 @@ static struct nfs4_lockdata *nfs4_alloc_lockdata(struct file_lock *fl, | |||
4024 | p->arg.lock_stateid = &lsp->ls_stateid; | 4025 | p->arg.lock_stateid = &lsp->ls_stateid; |
4025 | p->arg.lock_owner.clientid = server->nfs_client->cl_clientid; | 4026 | p->arg.lock_owner.clientid = server->nfs_client->cl_clientid; |
4026 | p->arg.lock_owner.id = lsp->ls_id.id; | 4027 | p->arg.lock_owner.id = lsp->ls_id.id; |
4028 | p->arg.lock_owner.s_dev = server->s_dev; | ||
4027 | p->res.lock_seqid = p->arg.lock_seqid; | 4029 | p->res.lock_seqid = p->arg.lock_seqid; |
4028 | p->lsp = lsp; | 4030 | p->lsp = lsp; |
4029 | p->server = server; | 4031 | p->server = server; |
@@ -4428,6 +4430,7 @@ void nfs4_release_lockowner(const struct nfs4_lock_state *lsp) | |||
4428 | return; | 4430 | return; |
4429 | args->lock_owner.clientid = server->nfs_client->cl_clientid; | 4431 | args->lock_owner.clientid = server->nfs_client->cl_clientid; |
4430 | args->lock_owner.id = lsp->ls_id.id; | 4432 | args->lock_owner.id = lsp->ls_id.id; |
4433 | args->lock_owner.s_dev = server->s_dev; | ||
4431 | msg.rpc_argp = args; | 4434 | msg.rpc_argp = args; |
4432 | rpc_call_async(server->client, &msg, 0, &nfs4_release_lockowner_ops, args); | 4435 | rpc_call_async(server->client, &msg, 0, &nfs4_release_lockowner_ops, args); |
4433 | } | 4436 | } |
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 3cbdd0c80a2d..8e496887ec61 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
@@ -71,8 +71,8 @@ static int nfs4_stat_to_errno(int); | |||
71 | /* lock,open owner id: | 71 | /* lock,open owner id: |
72 | * we currently use size 2 (u64) out of (NFS4_OPAQUE_LIMIT >> 2) | 72 | * we currently use size 2 (u64) out of (NFS4_OPAQUE_LIMIT >> 2) |
73 | */ | 73 | */ |
74 | #define open_owner_id_maxsz (1 + 4) | 74 | #define open_owner_id_maxsz (1 + 1 + 4) |
75 | #define lock_owner_id_maxsz (1 + 4) | 75 | #define lock_owner_id_maxsz (1 + 1 + 4) |
76 | #define decode_lockowner_maxsz (1 + XDR_QUADLEN(IDMAP_NAMESZ)) | 76 | #define decode_lockowner_maxsz (1 + XDR_QUADLEN(IDMAP_NAMESZ)) |
77 | #define compound_encode_hdr_maxsz (3 + (NFS4_MAXTAGLEN >> 2)) | 77 | #define compound_encode_hdr_maxsz (3 + (NFS4_MAXTAGLEN >> 2)) |
78 | #define compound_decode_hdr_maxsz (3 + (NFS4_MAXTAGLEN >> 2)) | 78 | #define compound_decode_hdr_maxsz (3 + (NFS4_MAXTAGLEN >> 2)) |
@@ -1088,10 +1088,11 @@ static void encode_lockowner(struct xdr_stream *xdr, const struct nfs_lowner *lo | |||
1088 | { | 1088 | { |
1089 | __be32 *p; | 1089 | __be32 *p; |
1090 | 1090 | ||
1091 | p = reserve_space(xdr, 28); | 1091 | p = reserve_space(xdr, 32); |
1092 | p = xdr_encode_hyper(p, lowner->clientid); | 1092 | p = xdr_encode_hyper(p, lowner->clientid); |
1093 | *p++ = cpu_to_be32(16); | 1093 | *p++ = cpu_to_be32(20); |
1094 | p = xdr_encode_opaque_fixed(p, "lock id:", 8); | 1094 | p = xdr_encode_opaque_fixed(p, "lock id:", 8); |
1095 | *p++ = cpu_to_be32(lowner->s_dev); | ||
1095 | xdr_encode_hyper(p, lowner->id); | 1096 | xdr_encode_hyper(p, lowner->id); |
1096 | } | 1097 | } |
1097 | 1098 | ||
@@ -1210,10 +1211,11 @@ static inline void encode_openhdr(struct xdr_stream *xdr, const struct nfs_opena | |||
1210 | *p++ = cpu_to_be32(OP_OPEN); | 1211 | *p++ = cpu_to_be32(OP_OPEN); |
1211 | *p = cpu_to_be32(arg->seqid->sequence->counter); | 1212 | *p = cpu_to_be32(arg->seqid->sequence->counter); |
1212 | encode_share_access(xdr, arg->fmode); | 1213 | encode_share_access(xdr, arg->fmode); |
1213 | p = reserve_space(xdr, 28); | 1214 | p = reserve_space(xdr, 32); |
1214 | p = xdr_encode_hyper(p, arg->clientid); | 1215 | p = xdr_encode_hyper(p, arg->clientid); |
1215 | *p++ = cpu_to_be32(16); | 1216 | *p++ = cpu_to_be32(20); |
1216 | p = xdr_encode_opaque_fixed(p, "open id:", 8); | 1217 | p = xdr_encode_opaque_fixed(p, "open id:", 8); |
1218 | *p++ = cpu_to_be32(arg->server->s_dev); | ||
1217 | xdr_encode_hyper(p, arg->id); | 1219 | xdr_encode_hyper(p, arg->id); |
1218 | } | 1220 | } |
1219 | 1221 | ||
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 83d36d3a12e6..b0068579bec2 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -317,6 +317,7 @@ struct nfs_closeres { | |||
317 | struct nfs_lowner { | 317 | struct nfs_lowner { |
318 | __u64 clientid; | 318 | __u64 clientid; |
319 | __u64 id; | 319 | __u64 id; |
320 | dev_t s_dev; | ||
320 | }; | 321 | }; |
321 | 322 | ||
322 | struct nfs_lock_args { | 323 | struct nfs_lock_args { |