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
Kirill Smelkov
linux
Commits
4ce70ada
Commit
4ce70ada
authored
Jan 03, 2006
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SUNRPC: Further cleanups
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
963d8fe5
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
27 additions
and
18 deletions
+27
-18
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+11
-10
fs/nfs/unlink.c
fs/nfs/unlink.c
+5
-8
include/linux/sunrpc/sched.h
include/linux/sunrpc/sched.h
+1
-0
net/sunrpc/sched.c
net/sunrpc/sched.c
+10
-0
No files found.
fs/nfs/nfs4proc.c
View file @
4ce70ada
...
@@ -195,14 +195,13 @@ static void update_changeattr(struct inode *inode, struct nfs4_change_info *cinf
...
@@ -195,14 +195,13 @@ static void update_changeattr(struct inode *inode, struct nfs4_change_info *cinf
}
}
/* Helper for asynchronous RPC calls */
/* Helper for asynchronous RPC calls */
static
int
nfs4_call_async
(
struct
rpc_clnt
*
clnt
,
rpc_action
tk_begin
,
static
int
nfs4_call_async
(
struct
rpc_clnt
*
clnt
,
const
struct
rpc_call_ops
*
tk_ops
,
void
*
calldata
)
const
struct
rpc_call_ops
*
tk_ops
,
void
*
calldata
)
{
{
struct
rpc_task
*
task
;
struct
rpc_task
*
task
;
if
(
!
(
task
=
rpc_new_task
(
clnt
,
RPC_TASK_ASYNC
,
tk_ops
,
calldata
)))
if
(
!
(
task
=
rpc_new_task
(
clnt
,
RPC_TASK_ASYNC
,
tk_ops
,
calldata
)))
return
-
ENOMEM
;
return
-
ENOMEM
;
task
->
tk_action
=
tk_begin
;
rpc_execute
(
task
);
rpc_execute
(
task
);
return
0
;
return
0
;
}
}
...
@@ -882,6 +881,8 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
...
@@ -882,6 +881,8 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
struct
nfs4_state
*
state
=
calldata
->
state
;
struct
nfs4_state
*
state
=
calldata
->
state
;
struct
nfs_server
*
server
=
NFS_SERVER
(
calldata
->
inode
);
struct
nfs_server
*
server
=
NFS_SERVER
(
calldata
->
inode
);
if
(
RPC_ASSASSINATED
(
task
))
return
;
/* hmm. we are done with the inode, and in the process of freeing
/* hmm. we are done with the inode, and in the process of freeing
* the state_owner. we keep this around to process errors
* the state_owner. we keep this around to process errors
*/
*/
...
@@ -904,9 +905,9 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
...
@@ -904,9 +905,9 @@ static void nfs4_close_done(struct rpc_task *task, void *data)
nfs_refresh_inode
(
calldata
->
inode
,
calldata
->
res
.
fattr
);
nfs_refresh_inode
(
calldata
->
inode
,
calldata
->
res
.
fattr
);
}
}
static
void
nfs4_close_
begin
(
struct
rpc_task
*
task
)
static
void
nfs4_close_
prepare
(
struct
rpc_task
*
task
,
void
*
data
)
{
{
struct
nfs4_closedata
*
calldata
=
(
struct
nfs4_closedata
*
)
task
->
tk_call
data
;
struct
nfs4_closedata
*
calldata
=
data
;
struct
nfs4_state
*
state
=
calldata
->
state
;
struct
nfs4_state
*
state
=
calldata
->
state
;
struct
rpc_message
msg
=
{
struct
rpc_message
msg
=
{
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_CLOSE
],
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_CLOSE
],
...
@@ -944,6 +945,7 @@ static void nfs4_close_begin(struct rpc_task *task)
...
@@ -944,6 +945,7 @@ static void nfs4_close_begin(struct rpc_task *task)
}
}
static
const
struct
rpc_call_ops
nfs4_close_ops
=
{
static
const
struct
rpc_call_ops
nfs4_close_ops
=
{
.
rpc_call_prepare
=
nfs4_close_prepare
,
.
rpc_call_done
=
nfs4_close_done
,
.
rpc_call_done
=
nfs4_close_done
,
.
rpc_release
=
nfs4_free_closedata
,
.
rpc_release
=
nfs4_free_closedata
,
};
};
...
@@ -980,8 +982,7 @@ int nfs4_do_close(struct inode *inode, struct nfs4_state *state)
...
@@ -980,8 +982,7 @@ int nfs4_do_close(struct inode *inode, struct nfs4_state *state)
calldata
->
res
.
fattr
=
&
calldata
->
fattr
;
calldata
->
res
.
fattr
=
&
calldata
->
fattr
;
calldata
->
res
.
server
=
server
;
calldata
->
res
.
server
=
server
;
status
=
nfs4_call_async
(
server
->
client
,
nfs4_close_begin
,
status
=
nfs4_call_async
(
server
->
client
,
&
nfs4_close_ops
,
calldata
);
&
nfs4_close_ops
,
calldata
);
if
(
status
==
0
)
if
(
status
==
0
)
goto
out
;
goto
out
;
...
@@ -2909,9 +2910,9 @@ static void nfs4_locku_done(struct rpc_task *task, void *data)
...
@@ -2909,9 +2910,9 @@ static void nfs4_locku_done(struct rpc_task *task, void *data)
}
}
}
}
static
void
nfs4_locku_
begin
(
struct
rpc_task
*
task
)
static
void
nfs4_locku_
prepare
(
struct
rpc_task
*
task
,
void
*
data
)
{
{
struct
nfs4_unlockdata
*
calldata
=
(
struct
nfs4_unlockdata
*
)
task
->
tk_call
data
;
struct
nfs4_unlockdata
*
calldata
=
data
;
struct
rpc_message
msg
=
{
struct
rpc_message
msg
=
{
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_LOCKU
],
.
rpc_proc
=
&
nfs4_procedures
[
NFSPROC4_CLNT_LOCKU
],
.
rpc_argp
=
&
calldata
->
arg
,
.
rpc_argp
=
&
calldata
->
arg
,
...
@@ -2932,6 +2933,7 @@ static void nfs4_locku_begin(struct rpc_task *task)
...
@@ -2932,6 +2933,7 @@ static void nfs4_locku_begin(struct rpc_task *task)
}
}
static
const
struct
rpc_call_ops
nfs4_locku_ops
=
{
static
const
struct
rpc_call_ops
nfs4_locku_ops
=
{
.
rpc_call_prepare
=
nfs4_locku_prepare
,
.
rpc_call_done
=
nfs4_locku_done
,
.
rpc_call_done
=
nfs4_locku_done
,
.
rpc_release
=
nfs4_locku_complete
,
.
rpc_release
=
nfs4_locku_complete
,
};
};
...
@@ -2979,8 +2981,7 @@ static int nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock *
...
@@ -2979,8 +2981,7 @@ static int nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock *
atomic_set
(
&
calldata
->
refcount
,
2
);
atomic_set
(
&
calldata
->
refcount
,
2
);
init_completion
(
&
calldata
->
completion
);
init_completion
(
&
calldata
->
completion
);
status
=
nfs4_call_async
(
NFS_SERVER
(
inode
)
->
client
,
nfs4_locku_begin
,
status
=
nfs4_call_async
(
NFS_SERVER
(
inode
)
->
client
,
&
nfs4_locku_ops
,
calldata
);
&
nfs4_locku_ops
,
calldata
);
if
(
status
==
0
)
if
(
status
==
0
)
wait_for_completion_interruptible
(
&
calldata
->
completion
);
wait_for_completion_interruptible
(
&
calldata
->
completion
);
do_vfs_lock
(
request
->
fl_file
,
request
);
do_vfs_lock
(
request
->
fl_file
,
request
);
...
...
fs/nfs/unlink.c
View file @
4ce70ada
...
@@ -87,10 +87,9 @@ nfs_copy_dname(struct dentry *dentry, struct nfs_unlinkdata *data)
...
@@ -87,10 +87,9 @@ nfs_copy_dname(struct dentry *dentry, struct nfs_unlinkdata *data)
* We delay initializing RPC info until after the call to dentry_iput()
* We delay initializing RPC info until after the call to dentry_iput()
* in order to minimize races against rename().
* in order to minimize races against rename().
*/
*/
static
void
static
void
nfs_async_unlink_init
(
struct
rpc_task
*
task
,
void
*
calldata
)
nfs_async_unlink_init
(
struct
rpc_task
*
task
)
{
{
struct
nfs_unlinkdata
*
data
=
(
struct
nfs_unlinkdata
*
)
task
->
tk_
calldata
;
struct
nfs_unlinkdata
*
data
=
calldata
;
struct
dentry
*
dir
=
data
->
dir
;
struct
dentry
*
dir
=
data
->
dir
;
struct
rpc_message
msg
=
{
struct
rpc_message
msg
=
{
.
rpc_cred
=
data
->
cred
,
.
rpc_cred
=
data
->
cred
,
...
@@ -147,6 +146,7 @@ static void nfs_async_unlink_release(void *calldata)
...
@@ -147,6 +146,7 @@ static void nfs_async_unlink_release(void *calldata)
}
}
static
const
struct
rpc_call_ops
nfs_unlink_ops
=
{
static
const
struct
rpc_call_ops
nfs_unlink_ops
=
{
.
rpc_call_prepare
=
nfs_async_unlink_init
,
.
rpc_call_done
=
nfs_async_unlink_done
,
.
rpc_call_done
=
nfs_async_unlink_done
,
.
rpc_release
=
nfs_async_unlink_release
,
.
rpc_release
=
nfs_async_unlink_release
,
};
};
...
@@ -160,7 +160,6 @@ nfs_async_unlink(struct dentry *dentry)
...
@@ -160,7 +160,6 @@ nfs_async_unlink(struct dentry *dentry)
{
{
struct
dentry
*
dir
=
dentry
->
d_parent
;
struct
dentry
*
dir
=
dentry
->
d_parent
;
struct
nfs_unlinkdata
*
data
;
struct
nfs_unlinkdata
*
data
;
struct
rpc_task
*
task
;
struct
rpc_clnt
*
clnt
=
NFS_CLIENT
(
dir
->
d_inode
);
struct
rpc_clnt
*
clnt
=
NFS_CLIENT
(
dir
->
d_inode
);
int
status
=
-
ENOMEM
;
int
status
=
-
ENOMEM
;
...
@@ -181,15 +180,13 @@ nfs_async_unlink(struct dentry *dentry)
...
@@ -181,15 +180,13 @@ nfs_async_unlink(struct dentry *dentry)
nfs_deletes
=
data
;
nfs_deletes
=
data
;
data
->
count
=
1
;
data
->
count
=
1
;
task
=
&
data
->
task
;
rpc_init_task
(
&
data
->
task
,
clnt
,
RPC_TASK_ASYNC
,
&
nfs_unlink_ops
,
data
);
rpc_init_task
(
task
,
clnt
,
RPC_TASK_ASYNC
,
&
nfs_unlink_ops
,
data
);
task
->
tk_action
=
nfs_async_unlink_init
;
spin_lock
(
&
dentry
->
d_lock
);
spin_lock
(
&
dentry
->
d_lock
);
dentry
->
d_flags
|=
DCACHE_NFSFS_RENAMED
;
dentry
->
d_flags
|=
DCACHE_NFSFS_RENAMED
;
spin_unlock
(
&
dentry
->
d_lock
);
spin_unlock
(
&
dentry
->
d_lock
);
rpc_sleep_on
(
&
nfs_delete_queue
,
task
,
NULL
,
NULL
);
rpc_sleep_on
(
&
nfs_delete_queue
,
&
data
->
task
,
NULL
,
NULL
);
status
=
0
;
status
=
0
;
out:
out:
return
status
;
return
status
;
...
...
include/linux/sunrpc/sched.h
View file @
4ce70ada
...
@@ -112,6 +112,7 @@ struct rpc_task {
...
@@ -112,6 +112,7 @@ struct rpc_task {
typedef
void
(
*
rpc_action
)(
struct
rpc_task
*
);
typedef
void
(
*
rpc_action
)(
struct
rpc_task
*
);
struct
rpc_call_ops
{
struct
rpc_call_ops
{
void
(
*
rpc_call_prepare
)(
struct
rpc_task
*
,
void
*
);
void
(
*
rpc_call_done
)(
struct
rpc_task
*
,
void
*
);
void
(
*
rpc_call_done
)(
struct
rpc_task
*
,
void
*
);
void
(
*
rpc_release
)(
void
*
);
void
(
*
rpc_release
)(
void
*
);
};
};
...
...
net/sunrpc/sched.c
View file @
4ce70ada
...
@@ -554,6 +554,14 @@ __rpc_atrun(struct rpc_task *task)
...
@@ -554,6 +554,14 @@ __rpc_atrun(struct rpc_task *task)
rpc_wake_up_task
(
task
);
rpc_wake_up_task
(
task
);
}
}
/*
* Helper to call task->tk_ops->rpc_call_prepare
*/
static
void
rpc_prepare_task
(
struct
rpc_task
*
task
)
{
task
->
tk_ops
->
rpc_call_prepare
(
task
,
task
->
tk_calldata
);
}
/*
/*
* Helper that calls task->tk_ops->rpc_call_done if it exists
* Helper that calls task->tk_ops->rpc_call_done if it exists
*/
*/
...
@@ -756,6 +764,8 @@ void rpc_init_task(struct rpc_task *task, struct rpc_clnt *clnt, int flags, cons
...
@@ -756,6 +764,8 @@ void rpc_init_task(struct rpc_task *task, struct rpc_clnt *clnt, int flags, cons
task
->
tk_client
=
clnt
;
task
->
tk_client
=
clnt
;
task
->
tk_flags
=
flags
;
task
->
tk_flags
=
flags
;
task
->
tk_ops
=
tk_ops
;
task
->
tk_ops
=
tk_ops
;
if
(
tk_ops
->
rpc_call_prepare
!=
NULL
)
task
->
tk_action
=
rpc_prepare_task
;
task
->
tk_calldata
=
calldata
;
task
->
tk_calldata
=
calldata
;
/* Initialize retry counters */
/* Initialize retry counters */
...
...
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