Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
c81468a1
Commit
c81468a1
authored
Dec 14, 2007
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NFS: Clean up the nfs_find_client function.
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
3a498026
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
22 deletions
+30
-22
fs/nfs/client.c
fs/nfs/client.c
+30
-22
No files found.
fs/nfs/client.c
View file @
c81468a1
...
...
@@ -208,52 +208,60 @@ void nfs_put_client(struct nfs_client *clp)
}
/*
* Find a client by
address
* -
caller must hold nfs_client_lock
* Find a client by
IP address and protocol version
* -
returns NULL if no such client
*/
st
atic
struct
nfs_client
*
__nfs_find_client
(
const
struct
sockaddr_in
*
addr
,
int
nfsversion
,
int
match_port
)
st
ruct
nfs_client
*
nfs_find_client
(
const
struct
sockaddr_in
*
addr
,
int
nfsversion
)
{
struct
nfs_client
*
clp
;
spin_lock
(
&
nfs_client_lock
);
list_for_each_entry
(
clp
,
&
nfs_client_list
,
cl_share_link
)
{
/* Don't match clients that failed to initialise properly */
if
(
clp
->
cl_cons_state
<
0
)
if
(
clp
->
cl_cons_state
!=
NFS_CS_READY
)
continue
;
/* Different NFS versions cannot share the same nfs_client */
if
(
clp
->
cl_nfsversion
!=
nfsversion
)
continue
;
/* Match only the IP address, not the port number */
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
)
goto
found
;
atomic_inc
(
&
clp
->
cl_count
);
spin_unlock
(
&
nfs_client_lock
);
return
clp
;
}
spin_unlock
(
&
nfs_client_lock
);
return
NULL
;
found:
atomic_inc
(
&
clp
->
cl_count
);
return
clp
;
}
/*
* Find a
client by IP address and protocol version
*
- returns NULL if no such client
* Find a
n nfs_client on the list that matches the initialisation data
*
that is supplied.
*/
st
ruct
nfs_client
*
nfs_find_client
(
const
struct
sockaddr_in
*
addr
,
int
nfsversion
)
st
atic
struct
nfs_client
*
nfs_match_client
(
const
struct
nfs_client_initdata
*
data
)
{
struct
nfs_client
*
clp
;
spin_lock
(
&
nfs_client_lock
);
clp
=
__nfs_find_client
(
addr
,
nfsversion
,
0
);
spin_unlock
(
&
nfs_client_lock
);
if
(
clp
!=
NULL
&&
clp
->
cl_cons_state
!=
NFS_CS_READY
)
{
nfs_put_client
(
clp
);
clp
=
NULL
;
list_for_each_entry
(
clp
,
&
nfs_client_list
,
cl_share_link
)
{
/* Don't match clients that failed to initialise properly */
if
(
clp
->
cl_cons_state
<
0
)
continue
;
/* Different NFS versions cannot share the same nfs_client */
if
(
clp
->
cl_nfsversion
!=
data
->
version
)
continue
;
/* Match the full socket address */
if
(
memcmp
(
&
clp
->
cl_addr
,
data
->
addr
,
sizeof
(
clp
->
cl_addr
))
!=
0
)
continue
;
atomic_inc
(
&
clp
->
cl_count
);
return
clp
;
}
return
clp
;
return
NULL
;
}
/*
...
...
@@ -273,7 +281,7 @@ static struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_in
do
{
spin_lock
(
&
nfs_client_lock
);
clp
=
__nfs_find_client
(
cl_init
->
addr
,
cl_init
->
version
,
1
);
clp
=
nfs_match_client
(
cl_init
);
if
(
clp
)
goto
found_client
;
if
(
new
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment