diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2012-05-21 22:46:16 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-22 16:45:48 -0400 |
commit | acdeb69d9c5934a678a732b4e24770326bf9471e (patch) | |
tree | 818b6b385ecddc5bf2c7da2641ec55704b940b3b /fs/nfs/nfs4xdr.c | |
parent | 4bf590e08f6db3395c181618a4c14f1c39b7c4af (diff) |
NFS: EXCHANGE_ID should save the server major and minor ID
Save the server major and minor ID results from EXCHANGE_ID, as they
are needed for detecting server trunking.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r-- | fs/nfs/nfs4xdr.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 12b99825a1c1..5ad2b2c2aecb 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
@@ -5144,24 +5144,27 @@ static int decode_exchange_id(struct xdr_stream *xdr, | |||
5144 | if (dummy != SP4_NONE) | 5144 | if (dummy != SP4_NONE) |
5145 | return -EIO; | 5145 | return -EIO; |
5146 | 5146 | ||
5147 | /* Throw away minor_id */ | 5147 | /* server_owner4.so_minor_id */ |
5148 | p = xdr_inline_decode(xdr, 8); | 5148 | p = xdr_inline_decode(xdr, 8); |
5149 | if (unlikely(!p)) | 5149 | if (unlikely(!p)) |
5150 | goto out_overflow; | 5150 | goto out_overflow; |
5151 | p = xdr_decode_hyper(p, &res->server_owner->minor_id); | ||
5151 | 5152 | ||
5152 | /* Throw away Major id */ | 5153 | /* server_owner4.so_major_id */ |
5153 | status = decode_opaque_inline(xdr, &dummy, &dummy_str); | 5154 | status = decode_opaque_inline(xdr, &dummy, &dummy_str); |
5154 | if (unlikely(status)) | 5155 | if (unlikely(status)) |
5155 | return status; | 5156 | return status; |
5157 | if (unlikely(dummy > NFS4_OPAQUE_LIMIT)) | ||
5158 | return -EIO; | ||
5159 | memcpy(res->server_owner->major_id, dummy_str, dummy); | ||
5160 | res->server_owner->major_id_sz = dummy; | ||
5156 | 5161 | ||
5157 | /* Save server_scope */ | 5162 | /* server_scope4 */ |
5158 | status = decode_opaque_inline(xdr, &dummy, &dummy_str); | 5163 | status = decode_opaque_inline(xdr, &dummy, &dummy_str); |
5159 | if (unlikely(status)) | 5164 | if (unlikely(status)) |
5160 | return status; | 5165 | return status; |
5161 | |||
5162 | if (unlikely(dummy > NFS4_OPAQUE_LIMIT)) | 5166 | if (unlikely(dummy > NFS4_OPAQUE_LIMIT)) |
5163 | return -EIO; | 5167 | return -EIO; |
5164 | |||
5165 | memcpy(res->server_scope->server_scope, dummy_str, dummy); | 5168 | memcpy(res->server_scope->server_scope, dummy_str, dummy); |
5166 | res->server_scope->server_scope_sz = dummy; | 5169 | res->server_scope->server_scope_sz = dummy; |
5167 | 5170 | ||