Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
5e1abf8c
Commit
5e1abf8c
authored
Mar 20, 2006
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lockd: Clean up of the server-side GRANTED code
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
6849c0ca
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
48 deletions
+53
-48
fs/lockd/clntproc.c
fs/lockd/clntproc.c
+0
-43
fs/lockd/svclock.c
fs/lockd/svclock.c
+53
-3
include/linux/lockd/lockd.h
include/linux/lockd/lockd.h
+0
-2
No files found.
fs/lockd/clntproc.c
View file @
5e1abf8c
...
...
@@ -147,49 +147,6 @@ static void nlmclnt_release_lockargs(struct nlm_rqst *req)
fl
->
fl_ops
->
fl_release_private
(
fl
);
}
/*
* Initialize arguments for GRANTED call. The nlm_rqst structure
* has been cleared already.
*/
int
nlmclnt_setgrantargs
(
struct
nlm_rqst
*
call
,
struct
nlm_lock
*
lock
)
{
locks_copy_lock
(
&
call
->
a_args
.
lock
.
fl
,
&
lock
->
fl
);
memcpy
(
&
call
->
a_args
.
lock
.
fh
,
&
lock
->
fh
,
sizeof
(
call
->
a_args
.
lock
.
fh
));
call
->
a_args
.
lock
.
caller
=
system_utsname
.
nodename
;
call
->
a_args
.
lock
.
oh
.
len
=
lock
->
oh
.
len
;
/* set default data area */
call
->
a_args
.
lock
.
oh
.
data
=
call
->
a_owner
;
call
->
a_args
.
lock
.
svid
=
lock
->
fl
.
fl_pid
;
if
(
lock
->
oh
.
len
>
NLMCLNT_OHSIZE
)
{
void
*
data
=
kmalloc
(
lock
->
oh
.
len
,
GFP_KERNEL
);
if
(
!
data
)
{
nlmclnt_freegrantargs
(
call
);
return
0
;
}
call
->
a_args
.
lock
.
oh
.
data
=
(
u8
*
)
data
;
}
memcpy
(
call
->
a_args
.
lock
.
oh
.
data
,
lock
->
oh
.
data
,
lock
->
oh
.
len
);
return
1
;
}
void
nlmclnt_freegrantargs
(
struct
nlm_rqst
*
call
)
{
struct
file_lock
*
fl
=
&
call
->
a_args
.
lock
.
fl
;
/*
* Check whether we allocated memory for the owner.
*/
if
(
call
->
a_args
.
lock
.
oh
.
data
!=
(
u8
*
)
call
->
a_owner
)
{
kfree
(
call
->
a_args
.
lock
.
oh
.
data
);
}
if
(
fl
->
fl_ops
&&
fl
->
fl_ops
->
fl_release_private
)
fl
->
fl_ops
->
fl_release_private
(
fl
);
}
/*
* This is the main entry point for the NLM client.
*/
...
...
fs/lockd/svclock.c
View file @
5e1abf8c
...
...
@@ -43,6 +43,8 @@ static void nlmsvc_release_block(struct nlm_block *block);
static
void
nlmsvc_insert_block
(
struct
nlm_block
*
block
,
unsigned
long
);
static
int
nlmsvc_remove_block
(
struct
nlm_block
*
block
);
static
int
nlmsvc_setgrantargs
(
struct
nlm_rqst
*
call
,
struct
nlm_lock
*
lock
);
static
void
nlmsvc_freegrantargs
(
struct
nlm_rqst
*
call
);
static
const
struct
rpc_call_ops
nlmsvc_grant_ops
;
/*
...
...
@@ -196,7 +198,7 @@ nlmsvc_create_block(struct svc_rqst *rqstp, struct nlm_file *file,
locks_init_lock
(
&
block
->
b_call
.
a_res
.
lock
.
fl
);
kref_init
(
&
block
->
b_count
);
if
(
!
nlm
clnt
_setgrantargs
(
&
block
->
b_call
,
lock
))
if
(
!
nlm
svc
_setgrantargs
(
&
block
->
b_call
,
lock
))
goto
failed_free
;
/* Set notifier function for VFS, and init args */
...
...
@@ -264,7 +266,7 @@ static void nlmsvc_free_block(struct kref *kref)
if
(
block
->
b_host
)
nlm_release_host
(
block
->
b_host
);
nlm
clnt
_freegrantargs
(
&
block
->
b_call
);
nlm
svc
_freegrantargs
(
&
block
->
b_call
);
kfree
(
block
);
}
...
...
@@ -298,6 +300,49 @@ nlmsvc_traverse_blocks(struct nlm_host *host, struct nlm_file *file, int action)
return
0
;
}
/*
* Initialize arguments for GRANTED call. The nlm_rqst structure
* has been cleared already.
*/
static
int
nlmsvc_setgrantargs
(
struct
nlm_rqst
*
call
,
struct
nlm_lock
*
lock
)
{
locks_copy_lock
(
&
call
->
a_args
.
lock
.
fl
,
&
lock
->
fl
);
memcpy
(
&
call
->
a_args
.
lock
.
fh
,
&
lock
->
fh
,
sizeof
(
call
->
a_args
.
lock
.
fh
));
call
->
a_args
.
lock
.
caller
=
system_utsname
.
nodename
;
call
->
a_args
.
lock
.
oh
.
len
=
lock
->
oh
.
len
;
/* set default data area */
call
->
a_args
.
lock
.
oh
.
data
=
call
->
a_owner
;
call
->
a_args
.
lock
.
svid
=
lock
->
fl
.
fl_pid
;
if
(
lock
->
oh
.
len
>
NLMCLNT_OHSIZE
)
{
void
*
data
=
kmalloc
(
lock
->
oh
.
len
,
GFP_KERNEL
);
if
(
!
data
)
{
nlmsvc_freegrantargs
(
call
);
return
0
;
}
call
->
a_args
.
lock
.
oh
.
data
=
(
u8
*
)
data
;
}
memcpy
(
call
->
a_args
.
lock
.
oh
.
data
,
lock
->
oh
.
data
,
lock
->
oh
.
len
);
return
1
;
}
static
void
nlmsvc_freegrantargs
(
struct
nlm_rqst
*
call
)
{
struct
file_lock
*
fl
=
&
call
->
a_args
.
lock
.
fl
;
/*
* Check whether we allocated memory for the owner.
*/
if
(
call
->
a_args
.
lock
.
oh
.
data
!=
(
u8
*
)
call
->
a_owner
)
{
kfree
(
call
->
a_args
.
lock
.
oh
.
data
);
}
if
(
fl
->
fl_ops
&&
fl
->
fl_ops
->
fl_release_private
)
fl
->
fl_ops
->
fl_release_private
(
fl
);
if
(
fl
->
fl_lmops
&&
fl
->
fl_lmops
->
fl_release_private
)
fl
->
fl_lmops
->
fl_release_private
(
fl
);
}
/*
* Attempt to establish a lock, and if it can't be granted, block it
* if required.
...
...
@@ -600,11 +645,16 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
}
nlmsvc_insert_block
(
block
,
timeout
);
svc_wake_up
(
block
->
b_daemon
);
nlmsvc_release_block
(
block
);
}
void
nlmsvc_grant_release
(
void
*
data
)
{
nlmsvc_release_block
(
data
);
}
static
const
struct
rpc_call_ops
nlmsvc_grant_ops
=
{
.
rpc_call_done
=
nlmsvc_grant_callback
,
.
rpc_release
=
nlmsvc_grant_release
,
};
/*
...
...
include/linux/lockd/lockd.h
View file @
5e1abf8c
...
...
@@ -153,8 +153,6 @@ long nlmclnt_block(struct nlm_rqst *req, long timeout);
u32
nlmclnt_grant
(
const
struct
sockaddr_in
*
addr
,
const
struct
nlm_lock
*
);
void
nlmclnt_recovery
(
struct
nlm_host
*
,
u32
);
int
nlmclnt_reclaim
(
struct
nlm_host
*
,
struct
file_lock
*
);
int
nlmclnt_setgrantargs
(
struct
nlm_rqst
*
,
struct
nlm_lock
*
);
void
nlmclnt_freegrantargs
(
struct
nlm_rqst
*
);
/*
* Host cache
...
...
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