Skip to content

Commit

Permalink
NFS: Clean up address comparison in __nfs_find_client()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Chuck Lever authored and Trond Myklebust committed Jan 30, 2008
1 parent 6a0ed1d commit d45273e
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions fs/nfs/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,7 @@ static struct nfs_client *__nfs_find_client(const struct sockaddr_in *addr, int
if (clp->cl_nfsversion != nfsversion)
continue;

if (memcmp(&clp->cl_addr.sin_addr, &addr->sin_addr,
sizeof(clp->cl_addr.sin_addr)) != 0)
if (clp->cl_addr.sin_addr.s_addr != addr->sin_addr.s_addr)
continue;

if (!match_port || clp->cl_addr.sin_port == addr->sin_port)
Expand Down

0 comments on commit d45273e

Please sign in to comment.