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
8e3ef35e
Commit
8e3ef35e
authored
Jun 26, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/net-2.5
into home.osdl.org:/home/torvalds/v2.5/linux
parents
f8012106
6d338bb2
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
791 additions
and
136 deletions
+791
-136
arch/i386/kernel/io_apic.c
arch/i386/kernel/io_apic.c
+0
-1
arch/m68knommu/kernel/traps.c
arch/m68knommu/kernel/traps.c
+2
-2
arch/m68knommu/platform/5206e/MOTOROLA/crt0_ram.S
arch/m68knommu/platform/5206e/MOTOROLA/crt0_ram.S
+7
-0
arch/m68knommu/platform/5272/NETtel/crt0_ram.S
arch/m68knommu/platform/5272/NETtel/crt0_ram.S
+8
-0
fs/buffer.c
fs/buffer.c
+4
-5
fs/compat_ioctl.c
fs/compat_ioctl.c
+6
-0
fs/lockd/svc.c
fs/lockd/svc.c
+0
-3
fs/nfsd/export.c
fs/nfsd/export.c
+4
-22
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4proc.c
+104
-14
fs/nfsd/nfs4state.c
fs/nfsd/nfs4state.c
+455
-6
fs/nfsd/nfs4xdr.c
fs/nfsd/nfs4xdr.c
+85
-0
fs/nfsd/nfsctl.c
fs/nfsd/nfsctl.c
+2
-20
include/linux/nfs.h
include/linux/nfs.h
+12
-1
include/linux/nfs4.h
include/linux/nfs4.h
+2
-0
include/linux/nfsd/nfsd.h
include/linux/nfsd/nfsd.h
+1
-0
include/linux/nfsd/state.h
include/linux/nfsd/state.h
+27
-5
include/linux/nfsd/xdr4.h
include/linux/nfsd/xdr4.h
+37
-7
include/linux/sunrpc/cache.h
include/linux/sunrpc/cache.h
+1
-2
kernel/exit.c
kernel/exit.c
+1
-1
kernel/fork.c
kernel/fork.c
+1
-1
kernel/timer.c
kernel/timer.c
+4
-5
mm/page-writeback.c
mm/page-writeback.c
+4
-6
mm/rmap.c
mm/rmap.c
+5
-8
mm/swap.c
mm/swap.c
+7
-8
net/ipv4/icmp.c
net/ipv4/icmp.c
+1
-1
net/sunrpc/cache.c
net/sunrpc/cache.c
+6
-16
net/sunrpc/svcauth_unix.c
net/sunrpc/svcauth_unix.c
+1
-2
net/sunrpc/svcsock.c
net/sunrpc/svcsock.c
+4
-0
No files found.
arch/i386/kernel/io_apic.c
View file @
8e3ef35e
...
...
@@ -1300,7 +1300,6 @@ void __init print_IO_APIC(void)
reg_03
.
raw
=
io_apic_read
(
apic
,
3
);
spin_unlock_irqrestore
(
&
ioapic_lock
,
flags
);
printk
(
"
\n
"
);
printk
(
KERN_DEBUG
"IO APIC #%d......
\n
"
,
mp_ioapics
[
apic
].
mpc_apicid
);
printk
(
KERN_DEBUG
".... register #00: %08X
\n
"
,
reg_00
.
raw
);
printk
(
KERN_DEBUG
"....... : physical APIC id: %02X
\n
"
,
reg_00
.
bits
.
ID
);
...
...
arch/m68knommu/kernel/traps.c
View file @
8e3ef35e
...
...
@@ -82,7 +82,7 @@ void die_if_kernel(char *str, struct pt_regs *fp, int nr)
printk
(
"Process %s (pid: %d, stackpage=%08lx)
\n
"
,
current
->
comm
,
current
->
pid
,
PAGE_SIZE
+
(
unsigned
long
)
current
);
show_stack
((
unsigned
long
*
)
fp
);
show_stack
(
NULL
,
(
unsigned
long
*
)
fp
);
do_exit
(
SIGSEGV
);
}
...
...
@@ -106,7 +106,7 @@ asmlinkage void buserr_c(struct frame *fp)
int
kstack_depth_to_print
=
48
;
void
show_stack
(
unsigned
long
*
esp
)
void
show_stack
(
struct
task_struct
*
task
,
unsigned
long
*
esp
)
{
unsigned
long
*
stack
,
*
endstack
,
addr
;
extern
char
_start
,
_etext
;
...
...
arch/m68knommu/platform/5206e/MOTOROLA/crt0_ram.S
View file @
8e3ef35e
...
...
@@ -96,6 +96,7 @@ _start:
movec
%
d0
,
%
CACR
/*
Enable
cache
*/
#ifdef CONFIG_ROMFS_FS
/
*
*
Move
ROM
filesystem
above
bss
:
-)
*/
...
...
@@ -117,6 +118,12 @@ _copy_romfs:
cmp.l
%a0
,
%a2
/*
Check
if
at
end
*/
bne
_copy_romfs
#else /* CONFIG_ROMFS_FS */
lea.l
_ebss
,
%a1
move.l
%a1
,
_ramstart
#endif /* CONFIG_ROMFS_FS */
/
*
*
Zero
out
the
bss
region
.
*/
...
...
arch/m68knommu/platform/5272/NETtel/crt0_ram.S
View file @
8e3ef35e
...
...
@@ -116,6 +116,8 @@ _start:
movec
%
d0
,
%
CACR
/*
Enable
cache
*/
nop
#ifdef CONFIG_ROMFS_FS
#ifdef CONFIG_ROMFS_FROM_ROM
/
*
*
check
for
an
in
RAM
romfs
...
...
@@ -160,6 +162,12 @@ _copy_romfs:
done_romfs
:
#endif
#else /* CONFIG_ROMFS_FS */
lea.l
_ebss
,
%a1
move.l
%a1
,
_ramstart
#endif /* CONFIG_ROMFS_FS */
/
*
*
Zero
out
the
bss
region
.
*/
...
...
fs/buffer.c
View file @
8e3ef35e
...
...
@@ -1337,7 +1337,7 @@ static void bh_lru_install(struct buffer_head *bh)
check_irqs_on
();
bh_lru_lock
();
lru
=
&
per_cpu
(
bh_lrus
,
smp_processor_id
()
);
lru
=
&
__get_cpu_var
(
bh_lrus
);
if
(
lru
->
bhs
[
0
]
!=
bh
)
{
struct
buffer_head
*
bhs
[
BH_LRU_SIZE
];
int
in
;
...
...
@@ -1381,7 +1381,7 @@ lookup_bh_lru(struct block_device *bdev, sector_t block, int size)
check_irqs_on
();
bh_lru_lock
();
lru
=
&
per_cpu
(
bh_lrus
,
smp_processor_id
()
);
lru
=
&
__get_cpu_var
(
bh_lrus
);
for
(
i
=
0
;
i
<
BH_LRU_SIZE
;
i
++
)
{
struct
buffer_head
*
bh
=
lru
->
bhs
[
i
];
...
...
@@ -1474,15 +1474,14 @@ EXPORT_SYMBOL(__bread);
*/
static
void
invalidate_bh_lru
(
void
*
arg
)
{
const
int
cpu
=
get_cpu
();
struct
bh_lru
*
b
=
&
per_cpu
(
bh_lrus
,
cpu
);
struct
bh_lru
*
b
=
&
get_cpu_var
(
bh_lrus
);
int
i
;
for
(
i
=
0
;
i
<
BH_LRU_SIZE
;
i
++
)
{
brelse
(
b
->
bhs
[
i
]);
b
->
bhs
[
i
]
=
NULL
;
}
put_cpu
(
);
put_cpu
_var
(
bh_lrus
);
}
static
void
invalidate_bh_lrus
(
void
)
...
...
fs/compat_ioctl.c
View file @
8e3ef35e
...
...
@@ -1562,6 +1562,8 @@ static int loop_status(unsigned int fd, unsigned int cmd, unsigned long arg)
extern
int
tty_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
#ifdef CONFIG_VT
static
int
vt_check
(
struct
file
*
file
)
{
struct
tty_struct
*
tty
;
...
...
@@ -1693,6 +1695,8 @@ static int do_unimap_ioctl(unsigned int fd, unsigned int cmd, struct unimapdesc3
return
0
;
}
#endif
/* CONFIG_VT */
static
int
do_smb_getmountuid
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
mm_segment_t
old_fs
=
get_fs
();
...
...
@@ -2398,11 +2402,13 @@ HANDLE_IOCTL(LOOP_SET_STATUS, loop_status)
HANDLE_IOCTL
(
LOOP_GET_STATUS
,
loop_status
)
#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
HANDLE_IOCTL
(
AUTOFS_IOC_SETTIMEOUT32
,
ioc_settimeout
)
#ifdef CONFIG_VT
HANDLE_IOCTL
(
PIO_FONTX
,
do_fontx_ioctl
)
HANDLE_IOCTL
(
GIO_FONTX
,
do_fontx_ioctl
)
HANDLE_IOCTL
(
PIO_UNIMAP
,
do_unimap_ioctl
)
HANDLE_IOCTL
(
GIO_UNIMAP
,
do_unimap_ioctl
)
HANDLE_IOCTL
(
KDFONTOP
,
do_kdfontop_ioctl
)
#endif
HANDLE_IOCTL
(
EXT2_IOC32_GETFLAGS
,
do_ext2_ioctl
)
HANDLE_IOCTL
(
EXT2_IOC32_SETFLAGS
,
do_ext2_ioctl
)
HANDLE_IOCTL
(
EXT2_IOC32_GETVERSION
,
do_ext2_ioctl
)
...
...
fs/lockd/svc.c
View file @
8e3ef35e
...
...
@@ -34,7 +34,6 @@
#include <linux/sunrpc/svcsock.h>
#include <linux/lockd/lockd.h>
#include <linux/nfs.h>
#include <linux/suspend.h>
#define NLMDBG_FACILITY NLMDBG_SVC
#define LOCKD_BUFSIZE (1024 + NLMSVC_XDRSIZE)
...
...
@@ -122,8 +121,6 @@ lockd(struct svc_rqst *rqstp)
while
((
nlmsvc_users
||
!
signalled
())
&&
nlmsvc_pid
==
current
->
pid
)
{
long
timeout
=
MAX_SCHEDULE_TIMEOUT
;
if
(
current
->
flags
&
PF_FREEZE
)
refrigerator
(
PF_IOTHREAD
);
if
(
signalled
())
{
flush_signals
(
current
);
if
(
nlmsvc_ops
)
{
...
...
fs/nfsd/export.c
View file @
8e3ef35e
...
...
@@ -195,8 +195,7 @@ int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
static
int
expkey_show
(
struct
seq_file
*
m
,
struct
cache_detail
*
cd
,
struct
cache_head
*
h
,
char
*
pbuf
)
struct
cache_head
*
h
)
{
struct
svc_expkey
*
ek
;
...
...
@@ -436,9 +435,8 @@ int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)
static
void
exp_flags
(
struct
seq_file
*
m
,
int
flag
,
int
fsid
,
uid_t
anonu
,
uid_t
anong
);
static
int
svc_export_show
(
struct
seq_file
*
m
,
struct
cache_detail
*
cd
,
struct
cache_head
*
h
,
char
*
pbuf
)
struct
cache_detail
*
cd
,
struct
cache_head
*
h
)
{
struct
svc_export
*
exp
;
...
...
@@ -1028,17 +1026,11 @@ static void exp_flags(struct seq_file *m, int flag, int fsid, uid_t anonu, uid_t
seq_printf
(
m
,
"%sanongid=%d"
,
first
++?
","
:
""
,
anong
);
}
static
inline
void
mangle
(
struct
seq_file
*
m
,
const
char
*
s
)
{
seq_escape
(
m
,
s
,
"
\t\n\\
"
);
}
static
int
e_show
(
struct
seq_file
*
m
,
void
*
p
)
{
struct
cache_head
*
cp
=
p
;
struct
svc_export
*
exp
=
container_of
(
cp
,
struct
svc_export
,
h
);
svc_client
*
clp
;
char
*
pbuf
;
if
(
p
==
(
void
*
)
1
)
{
seq_puts
(
m
,
"# Version 1.1
\n
"
);
...
...
@@ -1051,17 +1043,7 @@ static int e_show(struct seq_file *m, void *p)
if
(
cache_check
(
&
svc_export_cache
,
&
exp
->
h
,
NULL
))
return
0
;
if
(
cache_put
(
&
exp
->
h
,
&
svc_export_cache
))
BUG
();
pbuf
=
m
->
private
;
mangle
(
m
,
d_path
(
exp
->
ex_dentry
,
exp
->
ex_mnt
,
pbuf
,
PAGE_SIZE
));
seq_putc
(
m
,
'\t'
);
mangle
(
m
,
clp
->
name
);
seq_putc
(
m
,
'('
);
exp_flags
(
m
,
exp
->
ex_flags
,
exp
->
ex_fsid
,
exp
->
ex_anon_uid
,
exp
->
ex_anon_gid
);
seq_puts
(
m
,
")
\n
"
);
return
0
;
return
svc_export_show
(
m
,
&
svc_export_cache
,
cp
);
}
struct
seq_operations
nfs_exports_op
=
{
...
...
fs/nfsd/nfs4proc.c
View file @
8e3ef35e
...
...
@@ -55,12 +55,6 @@
#define NFSDDBG_FACILITY NFSDDBG_PROC
static
inline
int
nfsd4_close
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_close
*
close
)
{
return
nfs_ok
;
}
/* Note: The organization of the OPEN code seems a little strange; it
* has been superfluously split into three routines, one of which is named
* nfsd4_process_open2() even though there is no nfsd4_process_open1()!
...
...
@@ -140,10 +134,6 @@ nfsd4_open(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open
status
=
nfsd4_process_open2
(
rqstp
,
current_fh
,
open
);
if
(
status
)
return
status
;
/*
* To finish the open response, we just need to set the rflags.
*/
open
->
op_rflags
=
0
;
return
0
;
}
...
...
@@ -356,14 +346,51 @@ nfsd4_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_loo
static
inline
int
nfsd4_read
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_read
*
read
)
{
struct
nfs4_stateid
*
stp
;
int
status
;
/* no need to check permission - this will be done in nfsd_read() */
if
(
read
->
rd_offset
>=
OFFSET_MAX
)
return
nfserr_inval
;
nfsd4_lock_state
();
status
=
nfs_ok
;
/* For stateid -1, we don't check share reservations. */
if
(
ONE_STATEID
(
&
read
->
rd_stateid
))
{
dprintk
(
"NFSD: nfsd4_read: -1 stateid...
\n
"
);
goto
out
;
}
/*
* For stateid 0, the client doesn't have to have the file open, but
* we still check for share reservation conflicts.
*/
if
(
ZERO_STATEID
(
&
read
->
rd_stateid
))
{
dprintk
(
"NFSD: nfsd4_read: zero stateid...
\n
"
);
if
((
status
=
nfs4_share_conflict
(
current_fh
,
NFS4_SHARE_DENY_READ
)))
{
dprintk
(
"NFSD: nfsd4_read: conflicting share reservation!
\n
"
);
goto
out
;
}
status
=
nfs_ok
;
goto
out
;
}
/* check stateid */
if
((
status
=
nfs4_preprocess_stateid_op
(
current_fh
,
&
read
->
rd_stateid
,
CHECK_FH
,
&
stp
)))
{
dprintk
(
"NFSD: nfsd4_read: couldn't process stateid!
\n
"
);
goto
out
;
}
status
=
nfserr_openmode
;
if
(
!
(
stp
->
st_share_access
&
NFS4_SHARE_ACCESS_READ
))
{
dprintk
(
"NFSD: nfsd4_read: file not opened for read!
\n
"
);
goto
out
;
}
status
=
nfs_ok
;
out:
nfsd4_unlock_state
();
read
->
rd_rqstp
=
rqstp
;
read
->
rd_fhp
=
current_fh
;
return
nfs_ok
;
return
status
;
}
static
inline
int
...
...
@@ -425,28 +452,85 @@ nfsd4_rename(struct svc_rqst *rqstp, struct svc_fh *current_fh,
static
inline
int
nfsd4_setattr
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_setattr
*
setattr
)
{
return
nfsd_setattr
(
rqstp
,
current_fh
,
&
setattr
->
sa_iattr
,
0
,
(
time_t
)
0
);
struct
nfs4_stateid
*
stp
;
int
status
=
nfs_ok
;
if
(
setattr
->
sa_iattr
.
ia_valid
&
ATTR_SIZE
)
{
status
=
nfserr_bad_stateid
;
if
(
ZERO_STATEID
(
&
setattr
->
sa_stateid
)
||
ONE_STATEID
(
&
setattr
->
sa_stateid
))
{
dprintk
(
"NFSD: nfsd4_setattr: magic stateid!
\n
"
);
return
status
;
}
nfsd4_lock_state
();
if
((
status
=
nfs4_preprocess_stateid_op
(
current_fh
,
&
setattr
->
sa_stateid
,
CHECK_FH
,
&
stp
)))
{
dprintk
(
"NFSD: nfsd4_setattr: couldn't process stateid!
\n
"
);
goto
out
;
}
status
=
nfserr_openmode
;
if
(
!
(
stp
->
st_share_access
&
NFS4_SHARE_ACCESS_WRITE
))
{
dprintk
(
"NFSD: nfsd4_setattr: not opened for write!
\n
"
);
goto
out
;
}
nfsd4_unlock_state
();
}
return
(
nfsd_setattr
(
rqstp
,
current_fh
,
&
setattr
->
sa_iattr
,
0
,
(
time_t
)
0
));
out:
nfsd4_unlock_state
();
return
status
;
}
static
inline
int
nfsd4_write
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_write
*
write
)
{
struct
nfs4_stateid
*
stp
;
stateid_t
*
stateid
=
&
write
->
wr_stateid
;
u32
*
p
;
int
status
=
nfs_ok
;
/* no need to check permission - this will be done in nfsd_write() */
if
(
write
->
wr_offset
>=
OFFSET_MAX
)
return
nfserr_inval
;
nfsd4_lock_state
();
if
(
ZERO_STATEID
(
stateid
)
||
ONE_STATEID
(
stateid
))
{
dprintk
(
"NFSD: nfsd4_write: zero stateid...
\n
"
);
if
((
status
=
nfs4_share_conflict
(
current_fh
,
NFS4_SHARE_DENY_WRITE
)))
{
dprintk
(
"NFSD: nfsd4_write: conflicting share reservation!
\n
"
);
goto
out
;
}
goto
zero_stateid
;
}
if
((
status
=
nfs4_preprocess_stateid_op
(
current_fh
,
stateid
,
CHECK_FH
,
&
stp
)))
{
dprintk
(
"NFSD: nfsd4_write: couldn't process stateid!
\n
"
);
goto
out
;
}
status
=
nfserr_openmode
;
if
(
!
(
stp
->
st_share_access
&
NFS4_SHARE_ACCESS_WRITE
))
{
dprintk
(
"NFSD: nfsd4_write: file not open for write!
\n
"
);
goto
out
;
}
zero_stateid:
nfsd4_unlock_state
();
write
->
wr_bytes_written
=
write
->
wr_buflen
;
write
->
wr_how_written
=
write
->
wr_stable_how
;
p
=
(
u32
*
)
write
->
wr_verifier
;
*
p
++
=
nfssvc_boot
.
tv_sec
;
*
p
++
=
nfssvc_boot
.
tv_usec
;
return
nfsd_write
(
rqstp
,
current_fh
,
write
->
wr_offset
,
return
(
nfsd_write
(
rqstp
,
current_fh
,
write
->
wr_offset
,
write
->
wr_vec
,
write
->
wr_vlen
,
write
->
wr_buflen
,
&
write
->
wr_how_written
);
&
write
->
wr_how_written
));
out:
nfsd4_unlock_state
();
return
status
;
}
/* This routine never returns NFS_OK! If there are no other errors, it
...
...
@@ -609,6 +693,12 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
case
OP_OPEN
:
op
->
status
=
nfsd4_open
(
rqstp
,
&
current_fh
,
&
op
->
u
.
open
);
break
;
case
OP_OPEN_CONFIRM
:
op
->
status
=
nfsd4_open_confirm
(
rqstp
,
&
current_fh
,
&
op
->
u
.
open_confirm
);
break
;
case
OP_OPEN_DOWNGRADE
:
op
->
status
=
nfsd4_open_downgrade
(
rqstp
,
&
current_fh
,
&
op
->
u
.
open_downgrade
);
break
;
case
OP_PUTFH
:
op
->
status
=
nfsd4_putfh
(
rqstp
,
&
current_fh
,
&
op
->
u
.
putfh
);
break
;
...
...
fs/nfsd/nfs4state.c
View file @
8e3ef35e
This diff is collapsed.
Click to expand it.
fs/nfsd/nfs4xdr.c
View file @
8e3ef35e
...
...
@@ -659,6 +659,34 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
DECODE_TAIL
;
}
static
int
nfsd4_decode_open_confirm
(
struct
nfsd4_compoundargs
*
argp
,
struct
nfsd4_open_confirm
*
open_conf
)
{
DECODE_HEAD
;
READ_BUF
(
4
+
sizeof
(
stateid_t
));
READ32
(
open_conf
->
oc_req_stateid
.
si_generation
);
COPYMEM
(
&
open_conf
->
oc_req_stateid
.
si_opaque
,
sizeof
(
stateid_opaque_t
));
READ32
(
open_conf
->
oc_seqid
);
DECODE_TAIL
;
}
static
int
nfsd4_decode_open_downgrade
(
struct
nfsd4_compoundargs
*
argp
,
struct
nfsd4_open_downgrade
*
open_down
)
{
DECODE_HEAD
;
READ_BUF
(
4
+
sizeof
(
stateid_t
));
READ32
(
open_down
->
od_stateid
.
si_generation
);
COPYMEM
(
&
open_down
->
od_stateid
.
si_opaque
,
sizeof
(
stateid_opaque_t
));
READ32
(
open_down
->
od_seqid
);
READ32
(
open_down
->
od_share_access
);
READ32
(
open_down
->
od_share_deny
);
DECODE_TAIL
;
}
static
int
nfsd4_decode_putfh
(
struct
nfsd4_compoundargs
*
argp
,
struct
nfsd4_putfh
*
putfh
)
{
...
...
@@ -953,6 +981,12 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
case
OP_OPEN
:
op
->
status
=
nfsd4_decode_open
(
argp
,
&
op
->
u
.
open
);
break
;
case
OP_OPEN_CONFIRM
:
op
->
status
=
nfsd4_decode_open_confirm
(
argp
,
&
op
->
u
.
open_confirm
);
break
;
case
OP_OPEN_DOWNGRADE
:
op
->
status
=
nfsd4_decode_open_downgrade
(
argp
,
&
op
->
u
.
open_downgrade
);
break
;
case
OP_PUTFH
:
op
->
status
=
nfsd4_decode_putfh
(
argp
,
&
op
->
u
.
putfh
);
break
;
...
...
@@ -1057,6 +1091,21 @@ nfsd4_decode_compound(struct nfsd4_compoundargs *argp)
} while (0)
#define ADJUST_ARGS() resp->p = p
/*
* Routine for encoding the result of a
* "seqid-mutating" NFSv4 operation. This is
* where seqids are incremented
*/
#define ENCODE_SEQID_OP_TAIL(stateowner) \
BUG_ON(!stateowner); \
if (seqid_mutating_err(nfserr) && stateowner) { \
if (stateowner->so_confirmed) \
stateowner->so_seqid++; \
} \
return nfserr;
static
u32
nfs4_ftypes
[
16
]
=
{
NF4BAD
,
NF4FIFO
,
NF4CHR
,
NF4BAD
,
NF4DIR
,
NF4BAD
,
NF4BLK
,
NF4BAD
,
...
...
@@ -1701,6 +1750,36 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_open
}
}
static
int
nfsd4_encode_open_confirm
(
struct
nfsd4_compoundres
*
resp
,
int
nfserr
,
struct
nfsd4_open_confirm
*
oc
)
{
ENCODE_HEAD
;
if
(
!
nfserr
)
{
RESERVE_SPACE
(
sizeof
(
stateid_t
));
WRITE32
(
oc
->
oc_resp_stateid
.
si_generation
);
WRITEMEM
(
&
oc
->
oc_resp_stateid
.
si_opaque
,
sizeof
(
stateid_opaque_t
));
ADJUST_ARGS
();
}
ENCODE_SEQID_OP_TAIL
(
oc
->
oc_stateowner
);
}
static
int
nfsd4_encode_open_downgrade
(
struct
nfsd4_compoundres
*
resp
,
int
nfserr
,
struct
nfsd4_open_downgrade
*
od
)
{
ENCODE_HEAD
;
if
(
!
nfserr
)
{
RESERVE_SPACE
(
sizeof
(
stateid_t
));
WRITE32
(
od
->
od_stateid
.
si_generation
);
WRITEMEM
(
&
od
->
od_stateid
.
si_opaque
,
sizeof
(
stateid_opaque_t
));
ADJUST_ARGS
();
}
ENCODE_SEQID_OP_TAIL
(
od
->
od_stateowner
);
}
static
int
nfsd4_encode_read
(
struct
nfsd4_compoundres
*
resp
,
int
nfserr
,
struct
nfsd4_read
*
read
)
{
...
...
@@ -2013,6 +2092,12 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
case
OP_OPEN
:
nfsd4_encode_open
(
resp
,
op
->
status
,
&
op
->
u
.
open
);
break
;
case
OP_OPEN_CONFIRM
:
nfsd4_encode_open_confirm
(
resp
,
op
->
status
,
&
op
->
u
.
open_confirm
);
break
;
case
OP_OPEN_DOWNGRADE
:
nfsd4_encode_open_downgrade
(
resp
,
op
->
status
,
&
op
->
u
.
open_downgrade
);
break
;
case
OP_PUTFH
:
break
;
case
OP_PUTROOTFH
:
...
...
fs/nfsd/nfsctl.c
View file @
8e3ef35e
...
...
@@ -175,32 +175,14 @@ static struct file_operations transaction_ops = {
extern
struct
seq_operations
nfs_exports_op
;
static
int
exports_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
int
res
;
char
*
namebuf
=
kmalloc
(
PAGE_SIZE
,
GFP_KERNEL
);
if
(
namebuf
==
NULL
)
return
-
ENOMEM
;
res
=
seq_open
(
file
,
&
nfs_exports_op
);
if
(
res
)
kfree
(
namebuf
);
else
((
struct
seq_file
*
)
file
->
private_data
)
->
private
=
namebuf
;
return
res
;
}
static
int
exports_release
(
struct
inode
*
inode
,
struct
file
*
file
)
{
struct
seq_file
*
m
=
(
struct
seq_file
*
)
file
->
private_data
;
kfree
(
m
->
private
);
m
->
private
=
NULL
;
return
seq_release
(
inode
,
file
);
return
seq_open
(
file
,
&
nfs_exports_op
);
}
static
struct
file_operations
exports_operations
=
{
.
open
=
exports_open
,
.
read
=
seq_read
,
.
llseek
=
seq_lseek
,
.
release
=
exports
_release
,
.
release
=
seq
_release
,
};
/*----------------------------------------------------------------------------*/
...
...
include/linux/nfs.h
View file @
8e3ef35e
...
...
@@ -100,7 +100,18 @@
NFSERR_RECLAIM_CONFLICT
=
10035
,
/* v4 */
NFSERR_BAD_XDR
=
10036
,
/* v4 */
NFSERR_LOCKS_HELD
=
10037
,
/* v4 */
NFSERR_REPLAY_ME
=
10038
/* v4 */
NFSERR_OPENMODE
=
10038
,
/* v4 */
NFSERR_BADOWNER
=
10039
,
/* v4 */
NFSERR_BADCHAR
=
10040
,
/* v4 */
NFSERR_BADNAME
=
10041
,
/* v4 */
NFSERR_BAD_RANGE
=
10042
,
/* v4 */
NFSERR_LOCK_NOTSUPP
=
10043
,
/* v4 */
NFSERR_OP_ILLEGAL
=
10044
,
/* v4 */
NFSERR_DEADLOCK
=
10045
,
/* v4 */
NFSERR_FILE_OPEN
=
10046
,
/* v4 */
NFSERR_ADMIN_REVOKED
=
10047
,
/* v4 */
NFSERR_CB_PATH_DOWN
=
10048
,
/* v4 */
NFSERR_REPLAY_ME
=
10049
/* v4 */
};
/* NFSv2 file types - beware, these are not the same in NFSv3 */
...
...
include/linux/nfs4.h
View file @
8e3ef35e
...
...
@@ -35,6 +35,8 @@
#define NFS4_SHARE_ACCESS_READ 0x0001
#define NFS4_SHARE_ACCESS_WRITE 0x0002
#define NFS4_SHARE_ACCESS_BOTH 0x0003
#define NFS4_SHARE_DENY_READ 0x0001
#define NFS4_SHARE_DENY_WRITE 0x0002
#define NFS4_SET_TO_SERVER_TIME 0
#define NFS4_SET_TO_CLIENT_TIME 1
...
...
include/linux/nfsd/nfsd.h
View file @
8e3ef35e
...
...
@@ -189,6 +189,7 @@ void nfsd_lockd_shutdown(void);
#define nfserr_not_same __constant_htonl(NFSERR_NOT_SAME)
#define nfserr_readdir_nospc __constant_htonl(NFSERR_READDIR_NOSPC)
#define nfserr_bad_xdr __constant_htonl(NFSERR_BAD_XDR)
#define nfserr_openmode __constant_htonl(NFSERR_OPENMODE)
/* error codes for internal use */
/* if a request fails due to kmalloc failure, it gets dropped.
...
...
include/linux/nfsd/state.h
View file @
8e3ef35e
...
...
@@ -59,6 +59,12 @@ typedef struct {
#define si_stateownerid si_opaque.so_stateownerid
#define si_fileid si_opaque.so_fileid
extern
stateid_t
zerostateid
;
extern
stateid_t
onestateid
;
#define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid, sizeof(stateid_t)))
#define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid, sizeof(stateid_t)))
/*
* struct nfs4_client - one per client. Clientids live here.
* o Each nfs4_client is hashed by clientid.
...
...
@@ -83,16 +89,12 @@ struct nfs4_client {
nfs4_verifier
cl_confirm
;
/* generated by server */
};
extern
time_t
nfs4_laundromat
(
void
);
int
nfsd4_renew
(
clientid_t
*
clid
);
static
inline
void
update_stateid
(
stateid_t
*
stateid
)
{
stateid
->
si_generation
++
;
stateid
->
si_generation
++
;
}
/*
* nfs4_stateowner can either be an open_owner, or (eventually) a lock_owner
*
...
...
@@ -100,6 +102,7 @@ stateid->si_generation++;
* reverences when we release a stateowner.
*/
struct
nfs4_stateowner
{
struct
list_head
so_idhash
;
/* hash by so_id */
struct
list_head
so_strhash
;
/* hash by op_name */
struct
list_head
so_perclient
;
/* nfs4_client->cl_perclient */
struct
list_head
so_peropenstate
;
/* list: nfs4_stateid */
...
...
@@ -136,6 +139,7 @@ struct nfs4_file {
*/
struct
nfs4_stateid
{
struct
list_head
st_hash
;
/* openstateid_hashtbl[]*/
struct
list_head
st_perfile
;
/* file_hashtbl[]*/
struct
list_head
st_peropenstate
;
/* nfs4_stateowner->so_peropenstate */
struct
nfs4_stateowner
*
st_stateowner
;
...
...
@@ -147,4 +151,22 @@ struct nfs4_stateid {
unsigned
int
st_share_deny
;
};
/* flags for preprocess_seqid_op() */
#define CHECK_FH 0x00000001
#define CONFIRM 0x00000002
#define seqid_mutating_err(err) \
(((err) != nfserr_stale_clientid) && \
((err) != nfserr_bad_seqid) && \
((err) != nfserr_stale_stateid) && \
((err) != nfserr_bad_stateid))
extern
time_t
nfs4_laundromat
(
void
);
extern
int
nfsd4_renew
(
clientid_t
*
clid
);
extern
int
nfs4_preprocess_stateid_op
(
struct
svc_fh
*
current_fh
,
stateid_t
*
stateid
,
int
flags
,
struct
nfs4_stateid
**
stpp
);
extern
int
nfs4_share_conflict
(
struct
svc_fh
*
current_fh
,
unsigned
int
deny_type
);
extern
void
nfsd4_lock_state
(
void
);
extern
void
nfsd4_unlock_state
(
void
);
#endif
/* NFSD4_STATE_H */
include/linux/nfsd/xdr4.h
View file @
8e3ef35e
...
...
@@ -68,6 +68,7 @@ struct nfsd4_access {
struct
nfsd4_close
{
u32
cl_seqid
;
/* request */
stateid_t
cl_stateid
;
/* request+response */
struct
nfs4_stateowner
*
cl_stateowner
;
/* response */
};
struct
nfsd4_commit
{
...
...
@@ -147,6 +148,22 @@ struct nfsd4_open {
#define op_iattr u.iattr
#define op_verf u.verf
struct
nfsd4_open_confirm
{
stateid_t
oc_req_stateid
/* request */
;
u32
oc_seqid
/* request */
;
stateid_t
oc_resp_stateid
/* response */
;
struct
nfs4_stateowner
*
oc_stateowner
;
/* response */
};
struct
nfsd4_open_downgrade
{
stateid_t
od_stateid
;
u32
od_seqid
;
u32
od_share_access
;
u32
od_share_deny
;
struct
nfs4_stateowner
*
od_stateowner
;
};
struct
nfsd4_read
{
stateid_t
rd_stateid
;
/* request */
u64
rd_offset
;
/* request */
...
...
@@ -252,6 +269,8 @@ struct nfsd4_op {
struct
nfsd4_lookup
lookup
;
struct
nfsd4_verify
nverify
;
struct
nfsd4_open
open
;
struct
nfsd4_open_confirm
open_confirm
;
struct
nfsd4_open_downgrade
open_downgrade
;
struct
nfsd4_putfh
putfh
;
struct
nfsd4_read
read
;
struct
nfsd4_readdir
readdir
;
...
...
@@ -315,16 +334,27 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
}
int
nfs4svc_encode_voidres
(
struct
svc_rqst
*
,
u32
*
,
void
*
);
int
nfs4svc_decode_compoundargs
(
struct
svc_rqst
*
,
u32
*
,
struct
nfsd4_compoundargs
*
);
int
nfs4svc_encode_compoundres
(
struct
svc_rqst
*
,
u32
*
,
struct
nfsd4_compoundres
*
);
int
nfs4svc_decode_compoundargs
(
struct
svc_rqst
*
,
u32
*
,
struct
nfsd4_compoundargs
*
);
int
nfs4svc_encode_compoundres
(
struct
svc_rqst
*
,
u32
*
,
struct
nfsd4_compoundres
*
);
void
nfsd4_encode_operation
(
struct
nfsd4_compoundres
*
,
struct
nfsd4_op
*
);
int
nfsd4_encode_fattr
(
struct
svc_fh
*
fhp
,
struct
svc_export
*
exp
,
struct
dentry
*
dentry
,
u32
*
buffer
,
int
*
countp
,
u32
*
bmval
);
extern
int
nfsd4_setclientid
(
struct
svc_rqst
*
rqstp
,
struct
nfsd4_setclientid
*
setclid
);
extern
int
nfsd4_setclientid_confirm
(
struct
svc_rqst
*
rqstp
,
struct
nfsd4_setclientid_confirm
*
setclientid_confirm
);
struct
dentry
*
dentry
,
u32
*
buffer
,
int
*
countp
,
u32
*
bmval
);
extern
int
nfsd4_setclientid
(
struct
svc_rqst
*
rqstp
,
struct
nfsd4_setclientid
*
setclid
);
extern
int
nfsd4_setclientid_confirm
(
struct
svc_rqst
*
rqstp
,
struct
nfsd4_setclientid_confirm
*
setclientid_confirm
);
extern
int
nfsd4_process_open1
(
struct
nfsd4_open
*
open
);
extern
int
nfsd4_process_open2
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_open
*
open
);
extern
int
nfsd4_process_open2
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_open
*
open
);
extern
int
nfsd4_open_confirm
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_open_confirm
*
oc
);
extern
int
nfsd4_close
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_close
*
close
);
extern
int
nfsd4_open_downgrade
(
struct
svc_rqst
*
rqstp
,
struct
svc_fh
*
current_fh
,
struct
nfsd4_open_downgrade
*
od
);
#endif
/*
...
...
include/linux/sunrpc/cache.h
View file @
8e3ef35e
...
...
@@ -80,8 +80,7 @@ struct cache_detail {
int
(
*
cache_show
)(
struct
seq_file
*
m
,
struct
cache_detail
*
cd
,
struct
cache_head
*
h
,
char
*
pbuf
);
struct
cache_head
*
h
);
/* fields below this comment are for internal use
* and should not be touched by cache owners
...
...
kernel/exit.c
View file @
8e3ef35e
...
...
@@ -41,7 +41,7 @@ static void __unhash_process(struct task_struct *p)
detach_pid
(
p
,
PIDTYPE_PGID
);
detach_pid
(
p
,
PIDTYPE_SID
);
if
(
p
->
pid
)
per_cpu
(
process_counts
,
smp_processor_id
()
)
--
;
__get_cpu_var
(
process_counts
)
--
;
}
REMOVE_LINKS
(
p
);
...
...
kernel/fork.c
View file @
8e3ef35e
...
...
@@ -1006,7 +1006,7 @@ struct task_struct *copy_process(unsigned long clone_flags,
attach_pid
(
p
,
PIDTYPE_PGID
,
p
->
pgrp
);
attach_pid
(
p
,
PIDTYPE_SID
,
p
->
session
);
if
(
p
->
pid
)
per_cpu
(
process_counts
,
smp_processor_id
()
)
++
;
__get_cpu_var
(
process_counts
)
++
;
}
else
link_pid
(
p
,
p
->
pids
+
PIDTYPE_TGID
,
&
p
->
group_leader
->
pids
[
PIDTYPE_TGID
].
pid
);
...
...
kernel/timer.c
View file @
8e3ef35e
...
...
@@ -156,8 +156,7 @@ static void internal_add_timer(tvec_base_t *base, struct timer_list *timer)
*/
void
add_timer
(
struct
timer_list
*
timer
)
{
int
cpu
=
get_cpu
();
tvec_base_t
*
base
=
&
per_cpu
(
tvec_bases
,
cpu
);
tvec_base_t
*
base
=
&
get_cpu_var
(
tvec_bases
);
unsigned
long
flags
;
BUG_ON
(
timer_pending
(
timer
)
||
!
timer
->
function
);
...
...
@@ -168,7 +167,7 @@ void add_timer(struct timer_list *timer)
internal_add_timer
(
base
,
timer
);
timer
->
base
=
base
;
spin_unlock_irqrestore
(
&
base
->
lock
,
flags
);
put_cpu
(
);
put_cpu
_var
(
tvec_bases
);
}
/***
...
...
@@ -231,7 +230,7 @@ int mod_timer(struct timer_list *timer, unsigned long expires)
return
1
;
spin_lock_irqsave
(
&
timer
->
lock
,
flags
);
new_base
=
&
per_cpu
(
tvec_bases
,
smp_processor_id
()
);
new_base
=
&
__get_cpu_var
(
tvec_bases
);
repeat:
old_base
=
timer
->
base
;
...
...
@@ -789,7 +788,7 @@ seqlock_t xtime_lock __cacheline_aligned_in_smp = SEQLOCK_UNLOCKED;
*/
static
void
run_timer_softirq
(
struct
softirq_action
*
h
)
{
tvec_base_t
*
base
=
&
per_cpu
(
tvec_bases
,
smp_processor_id
()
);
tvec_base_t
*
base
=
&
__get_cpu_var
(
tvec_bases
);
if
(
time_after_eq
(
jiffies
,
base
->
timer_jiffies
))
__run_timers
(
base
);
...
...
mm/page-writeback.c
View file @
8e3ef35e
...
...
@@ -213,21 +213,19 @@ void balance_dirty_pages(struct address_space *mapping)
void
balance_dirty_pages_ratelimited
(
struct
address_space
*
mapping
)
{
static
DEFINE_PER_CPU
(
int
,
ratelimits
)
=
0
;
int
cpu
;
long
ratelimit
;
ratelimit
=
ratelimit_pages
;
if
(
dirty_exceeded
)
ratelimit
=
8
;
cpu
=
get_cpu
();
if
(
per_cpu
(
ratelimits
,
cpu
)
++
>=
ratelimit
)
{
per_cpu
(
ratelimits
,
cpu
)
=
0
;
put_cpu
();
if
(
get_cpu_var
(
ratelimits
)
++
>=
ratelimit
)
{
__get_cpu_var
(
ratelimits
)
=
0
;
put_cpu_var
(
ratelimits
);
balance_dirty_pages
(
mapping
);
return
;
}
put_cpu
(
);
put_cpu
_var
(
ratelimits
);
}
/*
...
...
mm/rmap.c
View file @
8e3ef35e
...
...
@@ -477,16 +477,15 @@ DEFINE_PER_CPU(struct pte_chain *, local_pte_chain) = 0;
*/
void
__pte_chain_free
(
struct
pte_chain
*
pte_chain
)
{
int
cpu
=
get_cpu
();
struct
pte_chain
**
pte_chainp
;
pte_chainp
=
&
get_cpu_var
(
local_pte_chain
);
if
(
pte_chain
->
next_and_idx
)
pte_chain
->
next_and_idx
=
0
;
pte_chainp
=
&
per_cpu
(
local_pte_chain
,
cpu
);
if
(
*
pte_chainp
)
kmem_cache_free
(
pte_chain_cache
,
*
pte_chainp
);
*
pte_chainp
=
pte_chain
;
put_cpu
(
);
put_cpu
_var
(
local_pte_chain
);
}
/*
...
...
@@ -501,21 +500,19 @@ void __pte_chain_free(struct pte_chain *pte_chain)
*/
struct
pte_chain
*
pte_chain_alloc
(
int
gfp_flags
)
{
int
cpu
;
struct
pte_chain
*
ret
;
struct
pte_chain
**
pte_chainp
;
if
(
gfp_flags
&
__GFP_WAIT
)
might_sleep
();
cpu
=
get_cpu
();
pte_chainp
=
&
per_cpu
(
local_pte_chain
,
cpu
);
pte_chainp
=
&
get_cpu_var
(
local_pte_chain
);
if
(
*
pte_chainp
)
{
ret
=
*
pte_chainp
;
*
pte_chainp
=
NULL
;
put_cpu
(
);
put_cpu
_var
(
local_pte_chain
);
}
else
{
put_cpu
(
);
put_cpu
_var
(
local_pte_chain
);
ret
=
kmem_cache_alloc
(
pte_chain_cache
,
gfp_flags
);
}
return
ret
;
...
...
mm/swap.c
View file @
8e3ef35e
...
...
@@ -112,35 +112,34 @@ static DEFINE_PER_CPU(struct pagevec, lru_add_active_pvecs) = { 0, };
void
lru_cache_add
(
struct
page
*
page
)
{
struct
pagevec
*
pvec
=
&
per_cpu
(
lru_add_pvecs
,
get_cpu
()
);
struct
pagevec
*
pvec
=
&
get_cpu_var
(
lru_add_pvecs
);
page_cache_get
(
page
);
if
(
!
pagevec_add
(
pvec
,
page
))
__pagevec_lru_add
(
pvec
);
put_cpu
(
);
put_cpu
_var
(
lru_add_pvecs
);
}
void
lru_cache_add_active
(
struct
page
*
page
)
{
struct
pagevec
*
pvec
=
&
per_cpu
(
lru_add_active_pvecs
,
get_cpu
()
);
struct
pagevec
*
pvec
=
&
get_cpu_var
(
lru_add_active_pvecs
);
page_cache_get
(
page
);
if
(
!
pagevec_add
(
pvec
,
page
))
__pagevec_lru_add_active
(
pvec
);
put_cpu
(
);
put_cpu
_var
(
lru_add_active_pvecs
);
}
void
lru_add_drain
(
void
)
{
int
cpu
=
get_cpu
();
struct
pagevec
*
pvec
=
&
per_cpu
(
lru_add_pvecs
,
cpu
);
struct
pagevec
*
pvec
=
&
get_cpu_var
(
lru_add_pvecs
);
if
(
pagevec_count
(
pvec
))
__pagevec_lru_add
(
pvec
);
pvec
=
&
per_cpu
(
lru_add_active_pvecs
,
cpu
);
pvec
=
&
__get_cpu_var
(
lru_add_active_pvecs
);
if
(
pagevec_count
(
pvec
))
__pagevec_lru_add_active
(
pvec
);
put_cpu
(
);
put_cpu
_var
(
lru_add_pvecs
);
}
/*
...
...
net/ipv4/icmp.c
View file @
8e3ef35e
...
...
@@ -228,7 +228,7 @@ static struct icmp_control icmp_pointers[NR_ICMP_TYPES+1];
* On SMP we have one ICMP socket per-cpu.
*/
static
DEFINE_PER_CPU
(
struct
socket
*
,
__icmp_socket
)
=
NULL
;
#define icmp_socket
per_cpu(__icmp_socket, smp_processor_id()
)
#define icmp_socket
__get_cpu_var(__icmp_socket
)
static
__inline__
void
icmp_xmit_lock
(
void
)
{
...
...
net/sunrpc/cache.c
View file @
8e3ef35e
...
...
@@ -1018,7 +1018,6 @@ int qword_get(char **bpp, char *dest, int bufsize)
struct
handle
{
struct
cache_detail
*
cd
;
char
*
pbuf
;
};
static
void
*
c_start
(
struct
seq_file
*
m
,
loff_t
*
pos
)
...
...
@@ -1087,10 +1086,9 @@ static int c_show(struct seq_file *m, void *p)
{
struct
cache_head
*
cp
=
p
;
struct
cache_detail
*
cd
=
((
struct
handle
*
)
m
->
private
)
->
cd
;
char
*
pbuf
=
((
struct
handle
*
)
m
->
private
)
->
pbuf
;
if
(
p
==
(
void
*
)
1
)
return
cd
->
cache_show
(
m
,
cd
,
NULL
,
pbuf
);
return
cd
->
cache_show
(
m
,
cd
,
NULL
);
ifdebug
(
CACHE
)
seq_printf
(
m
,
"# expiry=%ld refcnt=%d
\n
"
,
...
...
@@ -1102,7 +1100,7 @@ static int c_show(struct seq_file *m, void *p)
else
cache_put
(
cp
,
cd
);
return
cd
->
cache_show
(
m
,
cd
,
cp
,
pbuf
);
return
cd
->
cache_show
(
m
,
cd
,
cp
);
}
struct
seq_operations
cache_content_op
=
{
...
...
@@ -1115,26 +1113,19 @@ struct seq_operations cache_content_op = {
static
int
content_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
int
res
;
char
*
namebuf
=
kmalloc
(
PAGE_SIZE
,
GFP_KERNEL
);
struct
handle
*
han
;
struct
cache_detail
*
cd
=
PDE
(
inode
)
->
data
;
if
(
namebuf
==
NULL
)
return
-
ENOMEM
;
han
=
kmalloc
(
sizeof
(
*
han
),
GFP_KERNEL
);
if
(
han
==
NULL
)
{
kfree
(
namebuf
);
if
(
han
==
NULL
)
return
-
ENOMEM
;
}
han
->
pbuf
=
namebuf
;
han
->
cd
=
cd
;
res
=
seq_open
(
file
,
&
cache_content_op
);
if
(
res
)
{
kfree
(
namebuf
);
if
(
res
)
kfree
(
han
);
}
else
else
((
struct
seq_file
*
)
file
->
private_data
)
->
private
=
han
;
return
res
;
...
...
@@ -1143,7 +1134,6 @@ static int content_release(struct inode *inode, struct file *file)
{
struct
seq_file
*
m
=
(
struct
seq_file
*
)
file
->
private_data
;
struct
handle
*
han
=
m
->
private
;
kfree
(
han
->
pbuf
);
kfree
(
han
);
m
->
private
=
NULL
;
return
seq_release
(
inode
,
file
);
...
...
net/sunrpc/svcauth_unix.c
View file @
8e3ef35e
...
...
@@ -215,8 +215,7 @@ static int ip_map_parse(struct cache_detail *cd,
static
int
ip_map_show
(
struct
seq_file
*
m
,
struct
cache_detail
*
cd
,
struct
cache_head
*
h
,
char
*
pbuf
)
struct
cache_head
*
h
)
{
struct
ip_map
*
im
;
struct
in_addr
addr
;
...
...
net/sunrpc/svcsock.c
View file @
8e3ef35e
...
...
@@ -32,6 +32,7 @@
#include <linux/slab.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/suspend.h>
#include <net/sock.h>
#include <net/checksum.h>
#include <net/ip.h>
...
...
@@ -1190,6 +1191,9 @@ svc_recv(struct svc_serv *serv, struct svc_rqst *rqstp, long timeout)
schedule_timeout
(
timeout
);
if
(
current
->
flags
&
PF_FREEZE
)
refrigerator
(
PF_IOTHREAD
);
spin_lock_bh
(
&
serv
->
sv_lock
);
remove_wait_queue
(
&
rqstp
->
rq_wait
,
&
wait
);
...
...
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