diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-10-26 13:32:45 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-01-30 02:05:46 -0500 |
commit | d45273ed6f4613e81701c3e896d9db200c288fff (patch) | |
tree | 5108c42f43de3098fe6192e192b872899c8060c1 /fs/nfs | |
parent | 6a0ed1de8ecee0cde21ea667891a03f6c84ecd66 (diff) |
NFS: Clean up address comparison in __nfs_find_client()
The address comparison in the __nfs_find_client() function is deceptive.
It uses a memcmp() to check a pair of u32 fields for equality. Not only is
this inefficient, but usually memcmp() is used for comparing two *whole*
sockaddr_in's (which includes comparisons of the address family and port
number), so it's easy to mistake the comparison here for a whole sockaddr
comparison, which it isn't.
So for clarity and efficiency, we replace the memcmp() with a simple test
for equality between the two s_addr fields. This should have no
behavioral effect.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/client.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index c3740f5ab978..8b5f9b9685dd 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -220,8 +220,7 @@ static struct nfs_client *__nfs_find_client(const struct sockaddr_in *addr, int | |||
220 | if (clp->cl_nfsversion != nfsversion) | 220 | if (clp->cl_nfsversion != nfsversion) |
221 | continue; | 221 | continue; |
222 | 222 | ||
223 | if (memcmp(&clp->cl_addr.sin_addr, &addr->sin_addr, | 223 | if (clp->cl_addr.sin_addr.s_addr != addr->sin_addr.s_addr) |
224 | sizeof(clp->cl_addr.sin_addr)) != 0) | ||
225 | continue; | 224 | continue; |
226 | 225 | ||
227 | if (!match_port || clp->cl_addr.sin_port == addr->sin_port) | 226 | if (!match_port || clp->cl_addr.sin_port == addr->sin_port) |