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
3ef3aca5
Commit
3ef3aca5
authored
Oct 11, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
7c05bbf9
f55b6cfb
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
249 additions
and
166 deletions
+249
-166
arch/i386/kernel/timers/timer_pit.c
arch/i386/kernel/timers/timer_pit.c
+1
-0
fs/nfs/dir.c
fs/nfs/dir.c
+0
-1
fs/nfs/nfs3proc.c
fs/nfs/nfs3proc.c
+115
-3
fs/nfs/proc.c
fs/nfs/proc.c
+59
-2
fs/nfs/unlink.c
fs/nfs/unlink.c
+2
-3
fs/nfs/write.c
fs/nfs/write.c
+39
-135
include/linux/nfs_fs.h
include/linux/nfs_fs.h
+8
-21
include/linux/nfs_xdr.h
include/linux/nfs_xdr.h
+23
-1
net/sunrpc/xprt.c
net/sunrpc/xprt.c
+2
-0
No files found.
arch/i386/kernel/timers/timer_pit.c
View file @
3ef3aca5
...
...
@@ -6,6 +6,7 @@
#include <linux/spinlock.h>
#include <linux/module.h>
#include <linux/device.h>
#include <asm/mpspec.h>
#include <asm/timer.h>
#include <asm/io.h>
...
...
fs/nfs/dir.c
View file @
3ef3aca5
...
...
@@ -130,7 +130,6 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page)
return
0
;
error:
SetPageError
(
page
);
kunmap
(
page
);
unlock_page
(
page
);
invalidate_inode_pages
(
inode
->
i_mapping
);
desc
->
error
=
error
;
...
...
fs/nfs/nfs3proc.c
View file @
3ef3aca5
...
...
@@ -54,6 +54,17 @@ nfs3_rpc_call_wrapper(struct rpc_clnt *clnt, u32 proc, void *argp, void *resp, i
#define rpc_call_sync(clnt, msg, flags) \
nfs3_rpc_wrapper(clnt, msg, flags)
static
int
nfs3_async_handle_jukebox
(
struct
rpc_task
*
task
)
{
if
(
task
->
tk_status
!=
-
EJUKEBOX
)
return
0
;
task
->
tk_status
=
0
;
rpc_restart_call
(
task
);
rpc_delay
(
task
,
NFS_JUKEBOX_RETRY_TIME
);
return
1
;
}
/*
* Bare-bones access to getattr: this is for nfs_read_super.
*/
...
...
@@ -392,16 +403,20 @@ nfs3_proc_unlink_setup(struct rpc_message *msg, struct dentry *dir, struct qstr
return
0
;
}
static
void
nfs3_proc_unlink_done
(
struct
dentry
*
dir
,
struct
rpc_
message
*
msg
)
static
int
nfs3_proc_unlink_done
(
struct
dentry
*
dir
,
struct
rpc_
task
*
task
)
{
struct
rpc_message
*
msg
=
&
task
->
tk_msg
;
struct
nfs_fattr
*
dir_attr
;
if
(
nfs3_async_handle_jukebox
(
task
))
return
1
;
if
(
msg
->
rpc_argp
)
{
dir_attr
=
(
struct
nfs_fattr
*
)
msg
->
rpc_resp
;
nfs_refresh_inode
(
dir
->
d_inode
,
dir_attr
);
kfree
(
msg
->
rpc_argp
);
}
return
0
;
}
static
int
...
...
@@ -652,7 +667,7 @@ nfs3_read_done(struct rpc_task *task)
{
struct
nfs_read_data
*
data
=
(
struct
nfs_read_data
*
)
task
->
tk_calldata
;
if
(
nfs_async_handle_jukebox
(
task
))
if
(
nfs
3
_async_handle_jukebox
(
task
))
return
;
nfs_readpage_result
(
task
,
data
->
u
.
v3
.
res
.
count
,
data
->
u
.
v3
.
res
.
eof
);
}
...
...
@@ -692,6 +707,101 @@ nfs3_proc_read_setup(struct nfs_read_data *data, unsigned int count)
rpc_call_setup
(
&
data
->
task
,
&
msg
,
0
);
}
static
void
nfs3_write_done
(
struct
rpc_task
*
task
)
{
struct
nfs_write_data
*
data
=
(
struct
nfs_write_data
*
)
task
->
tk_calldata
;
if
(
nfs3_async_handle_jukebox
(
task
))
return
;
nfs_writeback_done
(
task
,
data
->
u
.
v3
.
args
.
stable
,
data
->
u
.
v3
.
args
.
count
,
data
->
u
.
v3
.
res
.
count
);
}
static
void
nfs3_proc_write_setup
(
struct
nfs_write_data
*
data
,
unsigned
int
count
,
int
how
)
{
struct
rpc_task
*
task
=
&
data
->
task
;
struct
inode
*
inode
=
data
->
inode
;
struct
nfs_page
*
req
;
int
stable
;
int
flags
;
struct
rpc_message
msg
;
if
(
how
&
FLUSH_STABLE
)
{
if
(
!
NFS_I
(
inode
)
->
ncommit
)
stable
=
NFS_FILE_SYNC
;
else
stable
=
NFS_DATA_SYNC
;
}
else
stable
=
NFS_UNSTABLE
;
req
=
nfs_list_entry
(
data
->
pages
.
next
);
data
->
u
.
v3
.
args
.
fh
=
NFS_FH
(
inode
);
data
->
u
.
v3
.
args
.
offset
=
req_offset
(
req
)
+
req
->
wb_offset
;
data
->
u
.
v3
.
args
.
pgbase
=
req
->
wb_offset
;
data
->
u
.
v3
.
args
.
count
=
count
;
data
->
u
.
v3
.
args
.
stable
=
stable
;
data
->
u
.
v3
.
args
.
pages
=
data
->
pagevec
;
data
->
u
.
v3
.
res
.
fattr
=
&
data
->
fattr
;
data
->
u
.
v3
.
res
.
count
=
count
;
data
->
u
.
v3
.
res
.
verf
=
&
data
->
verf
;
/* Set the initial flags for the task. */
flags
=
(
how
&
FLUSH_SYNC
)
?
0
:
RPC_TASK_ASYNC
;
/* Finalize the task. */
rpc_init_task
(
task
,
NFS_CLIENT
(
inode
),
nfs3_write_done
,
flags
);
task
->
tk_calldata
=
data
;
/* Release requests */
task
->
tk_release
=
nfs_writedata_release
;
msg
.
rpc_proc
=
NFS3PROC_WRITE
;
msg
.
rpc_argp
=
&
data
->
u
.
v3
.
args
;
msg
.
rpc_resp
=
&
data
->
u
.
v3
.
res
;
msg
.
rpc_cred
=
data
->
cred
;
rpc_call_setup
(
&
data
->
task
,
&
msg
,
0
);
}
static
void
nfs3_commit_done
(
struct
rpc_task
*
task
)
{
if
(
nfs3_async_handle_jukebox
(
task
))
return
;
nfs_commit_done
(
task
);
}
static
void
nfs3_proc_commit_setup
(
struct
nfs_write_data
*
data
,
u64
start
,
u32
len
,
int
how
)
{
struct
rpc_task
*
task
=
&
data
->
task
;
struct
inode
*
inode
=
data
->
inode
;
int
flags
;
struct
rpc_message
msg
;
data
->
u
.
v3
.
args
.
fh
=
NFS_FH
(
data
->
inode
);
data
->
u
.
v3
.
args
.
offset
=
start
;
data
->
u
.
v3
.
args
.
count
=
len
;
data
->
u
.
v3
.
res
.
count
=
len
;
data
->
u
.
v3
.
res
.
fattr
=
&
data
->
fattr
;
data
->
u
.
v3
.
res
.
verf
=
&
data
->
verf
;
/* Set the initial flags for the task. */
flags
=
(
how
&
FLUSH_SYNC
)
?
0
:
RPC_TASK_ASYNC
;
/* Finalize the task. */
rpc_init_task
(
task
,
NFS_CLIENT
(
inode
),
nfs3_commit_done
,
flags
);
task
->
tk_calldata
=
data
;
/* Release requests */
task
->
tk_release
=
nfs_writedata_release
;
msg
.
rpc_proc
=
NFS3PROC_COMMIT
;
msg
.
rpc_argp
=
&
data
->
u
.
v3
.
args
;
msg
.
rpc_resp
=
&
data
->
u
.
v3
.
res
;
msg
.
rpc_cred
=
data
->
cred
;
rpc_call_setup
(
&
data
->
task
,
&
msg
,
0
);
}
struct
nfs_rpc_ops
nfs_v3_clientops
=
{
.
version
=
3
,
/* protocol version */
.
getroot
=
nfs3_proc_get_root
,
...
...
@@ -716,4 +826,6 @@ struct nfs_rpc_ops nfs_v3_clientops = {
.
statfs
=
nfs3_proc_statfs
,
.
decode_dirent
=
nfs3_decode_dirent
,
.
read_setup
=
nfs3_proc_read_setup
,
.
write_setup
=
nfs3_proc_write_setup
,
.
commit_setup
=
nfs3_proc_commit_setup
,
};
fs/nfs/proc.c
View file @
3ef3aca5
...
...
@@ -312,13 +312,16 @@ nfs_proc_unlink_setup(struct rpc_message *msg, struct dentry *dir, struct qstr *
return
0
;
}
static
void
nfs_proc_unlink_done
(
struct
dentry
*
dir
,
struct
rpc_
message
*
msg
)
static
int
nfs_proc_unlink_done
(
struct
dentry
*
dir
,
struct
rpc_
task
*
task
)
{
struct
rpc_message
*
msg
=
&
task
->
tk_msg
;
if
(
msg
->
rpc_argp
)
{
NFS_CACHEINV
(
dir
->
d_inode
);
kfree
(
msg
->
rpc_argp
);
}
return
0
;
}
static
int
...
...
@@ -512,6 +515,58 @@ nfs_proc_read_setup(struct nfs_read_data *data, unsigned int count)
rpc_call_setup
(
&
data
->
task
,
&
msg
,
0
);
}
static
void
nfs_write_done
(
struct
rpc_task
*
task
)
{
struct
nfs_write_data
*
data
=
(
struct
nfs_write_data
*
)
task
->
tk_calldata
;
nfs_writeback_done
(
task
,
data
->
u
.
v3
.
args
.
stable
,
data
->
u
.
v3
.
args
.
count
,
data
->
u
.
v3
.
res
.
count
);
}
static
void
nfs_proc_write_setup
(
struct
nfs_write_data
*
data
,
unsigned
int
count
,
int
how
)
{
struct
rpc_task
*
task
=
&
data
->
task
;
struct
inode
*
inode
=
data
->
inode
;
struct
nfs_page
*
req
;
int
flags
;
struct
rpc_message
msg
;
/* Note: NFSv2 ignores @stable and always uses NFS_FILE_SYNC */
req
=
nfs_list_entry
(
data
->
pages
.
next
);
data
->
u
.
v3
.
args
.
fh
=
NFS_FH
(
inode
);
data
->
u
.
v3
.
args
.
offset
=
req_offset
(
req
)
+
req
->
wb_offset
;
data
->
u
.
v3
.
args
.
pgbase
=
req
->
wb_offset
;
data
->
u
.
v3
.
args
.
count
=
count
;
data
->
u
.
v3
.
args
.
stable
=
NFS_FILE_SYNC
;
data
->
u
.
v3
.
args
.
pages
=
data
->
pagevec
;
data
->
u
.
v3
.
res
.
fattr
=
&
data
->
fattr
;
data
->
u
.
v3
.
res
.
count
=
count
;
data
->
u
.
v3
.
res
.
verf
=
&
data
->
verf
;
/* Set the initial flags for the task. */
flags
=
(
how
&
FLUSH_SYNC
)
?
0
:
RPC_TASK_ASYNC
;
/* Finalize the task. */
rpc_init_task
(
task
,
NFS_CLIENT
(
inode
),
nfs_write_done
,
flags
);
task
->
tk_calldata
=
data
;
/* Release requests */
task
->
tk_release
=
nfs_writedata_release
;
msg
.
rpc_proc
=
NFSPROC_WRITE
;
msg
.
rpc_argp
=
&
data
->
u
.
v3
.
args
;
msg
.
rpc_resp
=
&
data
->
u
.
v3
.
res
;
msg
.
rpc_cred
=
data
->
cred
;
rpc_call_setup
(
&
data
->
task
,
&
msg
,
0
);
}
static
void
nfs_proc_commit_setup
(
struct
nfs_write_data
*
data
,
u64
start
,
u32
len
,
int
how
)
{
BUG
();
}
struct
nfs_rpc_ops
nfs_v2_clientops
=
{
.
version
=
2
,
/* protocol version */
.
getroot
=
nfs_proc_get_root
,
...
...
@@ -537,4 +592,6 @@ struct nfs_rpc_ops nfs_v2_clientops = {
.
statfs
=
nfs_proc_statfs
,
.
decode_dirent
=
nfs_decode_dirent
,
.
read_setup
=
nfs_proc_read_setup
,
.
write_setup
=
nfs_proc_write_setup
,
.
commit_setup
=
nfs_proc_commit_setup
,
};
fs/nfs/unlink.c
View file @
3ef3aca5
...
...
@@ -123,13 +123,12 @@ nfs_async_unlink_done(struct rpc_task *task)
struct
dentry
*
dir
=
data
->
dir
;
struct
inode
*
dir_i
;
if
(
nfs_async_handle_jukebox
(
task
))
return
;
if
(
!
dir
)
return
;
dir_i
=
dir
->
d_inode
;
nfs_zap_caches
(
dir_i
);
NFS_PROTO
(
dir_i
)
->
unlink_done
(
dir
,
&
task
->
tk_msg
);
if
(
NFS_PROTO
(
dir_i
)
->
unlink_done
(
dir
,
task
))
return
;
put_rpccred
(
data
->
cred
);
data
->
cred
=
NULL
;
dput
(
dir
);
...
...
fs/nfs/write.c
View file @
3ef3aca5
This diff is collapsed.
Click to expand it.
include/linux/nfs_fs.h
View file @
3ef3aca5
...
...
@@ -323,6 +323,14 @@ extern void nfs_complete_unlink(struct dentry *);
extern
int
nfs_writepage
(
struct
page
*
);
extern
int
nfs_flush_incompatible
(
struct
file
*
file
,
struct
page
*
page
);
extern
int
nfs_updatepage
(
struct
file
*
,
struct
page
*
,
unsigned
int
,
unsigned
int
);
extern
void
nfs_writeback_done
(
struct
rpc_task
*
task
,
int
stable
,
unsigned
int
arg_count
,
unsigned
int
res_count
);
extern
void
nfs_writedata_release
(
struct
rpc_task
*
task
);
#if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
extern
void
nfs_commit_done
(
struct
rpc_task
*
);
#endif
/*
* Try to write back everything synchronously (but check the
* return value!)
...
...
@@ -462,28 +470,7 @@ extern void * nfs_root_data(void);
__retval; \
})
#ifdef CONFIG_NFS_V3
#define NFS_JUKEBOX_RETRY_TIME (5 * HZ)
static
inline
int
nfs_async_handle_jukebox
(
struct
rpc_task
*
task
)
{
if
(
task
->
tk_status
!=
-
EJUKEBOX
)
return
0
;
task
->
tk_status
=
0
;
rpc_restart_call
(
task
);
rpc_delay
(
task
,
NFS_JUKEBOX_RETRY_TIME
);
return
1
;
}
#else
static
inline
int
nfs_async_handle_jukebox
(
struct
rpc_task
*
task
)
{
return
0
;
}
#endif
/* CONFIG_NFS_V3 */
#endif
/* __KERNEL__ */
...
...
include/linux/nfs_xdr.h
View file @
3ef3aca5
...
...
@@ -67,6 +67,7 @@ struct nfs_fsinfo {
__u64
afiles
;
/* # of files available to user */
__u32
linkmax
;
/* max # of hard links */
__u32
namelen
;
/* max name length */
__u32
lease_time
;
/* in seconds */
};
/*
...
...
@@ -326,6 +327,25 @@ struct nfs_read_data {
}
u
;
};
struct
nfs_write_data
{
struct
rpc_task
task
;
struct
inode
*
inode
;
struct
rpc_cred
*
cred
;
struct
nfs_fattr
fattr
;
struct
nfs_writeverf
verf
;
struct
list_head
pages
;
/* Coalesced requests we wish to flush */
struct
page
*
pagevec
[
NFS_WRITE_MAXIOV
];
union
{
struct
{
struct
nfs_writeargs
args
;
struct
nfs_writeres
res
;
}
v3
;
#ifdef CONFIG_NFS_V4
/* NFSv4 data to come here... */
#endif
}
u
;
};
/*
* RPC procedure vector for NFSv2/NFSv3 demuxing
*/
...
...
@@ -356,7 +376,7 @@ struct nfs_rpc_ops {
int
(
*
remove
)
(
struct
inode
*
,
struct
qstr
*
);
int
(
*
unlink_setup
)
(
struct
rpc_message
*
,
struct
dentry
*
,
struct
qstr
*
);
void
(
*
unlink_done
)
(
struct
dentry
*
,
struct
rpc_message
*
);
int
(
*
unlink_done
)
(
struct
dentry
*
,
struct
rpc_task
*
);
int
(
*
rename
)
(
struct
inode
*
,
struct
qstr
*
,
struct
inode
*
,
struct
qstr
*
);
int
(
*
link
)
(
struct
inode
*
,
struct
inode
*
,
struct
qstr
*
);
...
...
@@ -374,6 +394,8 @@ struct nfs_rpc_ops {
struct
nfs_fsinfo
*
);
u32
*
(
*
decode_dirent
)(
u32
*
,
struct
nfs_entry
*
,
int
plus
);
void
(
*
read_setup
)
(
struct
nfs_read_data
*
,
unsigned
int
count
);
void
(
*
write_setup
)
(
struct
nfs_write_data
*
,
unsigned
int
count
,
int
how
);
void
(
*
commit_setup
)
(
struct
nfs_write_data
*
,
u64
start
,
u32
len
,
int
how
);
};
/*
...
...
net/sunrpc/xprt.c
View file @
3ef3aca5
...
...
@@ -1446,6 +1446,8 @@ xprt_bind_socket(struct rpc_xprt *xprt, struct socket *sock)
sk
->
no_check
=
UDP_CSUM_NORCV
;
xprt_set_connected
(
xprt
);
}
else
{
struct
tcp_opt
*
tp
=
tcp_sk
(
sk
);
tp
->
nonagle
=
1
;
/* disable Nagle's algorithm */
sk
->
data_ready
=
tcp_data_ready
;
sk
->
state_change
=
tcp_state_change
;
xprt_clear_connected
(
xprt
);
...
...
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