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
b446946d
Commit
b446946d
authored
May 10, 2002
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge mandrakesoft.com:/home/jgarzik/vanilla/linus-2.5
into mandrakesoft.com:/home/jgarzik/repo/net-drivers-2.5
parents
feeb46df
fa44005c
Changes
49
Hide whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
210 additions
and
758 deletions
+210
-758
Documentation/filesystems/porting
Documentation/filesystems/porting
+6
-0
arch/alpha/vmlinux.lds.in
arch/alpha/vmlinux.lds.in
+1
-0
arch/arm/vmlinux-armo.lds.in
arch/arm/vmlinux-armo.lds.in
+1
-0
arch/arm/vmlinux-armv.lds.in
arch/arm/vmlinux-armv.lds.in
+1
-0
arch/cris/cris.ld
arch/cris/cris.ld
+1
-0
arch/i386/pci/Makefile
arch/i386/pci/Makefile
+0
-2
arch/i386/vmlinux.lds
arch/i386/vmlinux.lds
+1
-0
arch/ia64/vmlinux.lds.S
arch/ia64/vmlinux.lds.S
+1
-0
arch/m68k/vmlinux-sun3.lds
arch/m68k/vmlinux-sun3.lds
+1
-0
arch/m68k/vmlinux.lds
arch/m68k/vmlinux.lds
+1
-0
arch/mips64/ld.script.elf64
arch/mips64/ld.script.elf64
+1
-0
arch/parisc/vmlinux.lds
arch/parisc/vmlinux.lds
+1
-0
arch/ppc/vmlinux.lds
arch/ppc/vmlinux.lds
+1
-0
arch/ppc64/vmlinux.lds
arch/ppc64/vmlinux.lds
+1
-0
arch/s390/vmlinux-shared.lds
arch/s390/vmlinux-shared.lds
+1
-0
arch/s390/vmlinux.lds
arch/s390/vmlinux.lds
+1
-0
arch/s390x/vmlinux-shared.lds
arch/s390x/vmlinux-shared.lds
+1
-0
arch/s390x/vmlinux.lds
arch/s390x/vmlinux.lds
+1
-0
arch/sh/vmlinux.lds.S
arch/sh/vmlinux.lds.S
+2
-0
arch/sparc/kernel/ptrace.c
arch/sparc/kernel/ptrace.c
+8
-24
arch/sparc/kernel/sys_sunos.c
arch/sparc/kernel/sys_sunos.c
+2
-2
arch/sparc/vmlinux.lds
arch/sparc/vmlinux.lds
+1
-0
arch/sparc64/kernel/pci.c
arch/sparc64/kernel/pci.c
+4
-2
arch/sparc64/kernel/process.c
arch/sparc64/kernel/process.c
+0
-7
arch/sparc64/kernel/ptrace.c
arch/sparc64/kernel/ptrace.c
+8
-24
arch/sparc64/kernel/sparc64_ksyms.c
arch/sparc64/kernel/sparc64_ksyms.c
+4
-0
arch/sparc64/kernel/sys_sunos32.c
arch/sparc64/kernel/sys_sunos32.c
+2
-2
arch/sparc64/vmlinux.lds
arch/sparc64/vmlinux.lds
+1
-0
arch/x86_64/vmlinux.lds
arch/x86_64/vmlinux.lds
+1
-0
drivers/base/Makefile
drivers/base/Makefile
+1
-1
drivers/pci/Makefile
drivers/pci/Makefile
+2
-2
drivers/video/aty/mach64_gx.c
drivers/video/aty/mach64_gx.c
+1
-0
fs/isofs/inode.c
fs/isofs/inode.c
+16
-0
fs/jfs/jfs_txnmgr.c
fs/jfs/jfs_txnmgr.c
+23
-12
fs/nfsd/export.c
fs/nfsd/export.c
+3
-6
fs/nfsd/nfsfh.c
fs/nfsd/nfsfh.c
+4
-550
fs/nls/Makefile
fs/nls/Makefile
+3
-4
fs/ntfs/super.c
fs/ntfs/super.c
+1
-8
fs/super.c
fs/super.c
+0
-1
include/asm-sparc64/bitops.h
include/asm-sparc64/bitops.h
+79
-63
include/asm-sparc64/visasm.h
include/asm-sparc64/visasm.h
+0
-2
include/linux/fs.h
include/linux/fs.h
+0
-33
include/linux/sched.h
include/linux/sched.h
+5
-0
include/math-emu/op-common.h
include/math-emu/op-common.h
+7
-5
kernel/ksyms.c
kernel/ksyms.c
+1
-0
kernel/timer.c
kernel/timer.c
+7
-2
net/ipv4/syncookies.c
net/ipv4/syncookies.c
+0
-3
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_ipv4.c
+0
-1
net/sched/sch_ingress.c
net/sched/sch_ingress.c
+2
-2
No files found.
Documentation/filesystems/porting
View file @
b446946d
...
@@ -146,3 +146,9 @@ support for this helper, particularly get_parent.
...
@@ -146,3 +146,9 @@ support for this helper, particularly get_parent.
It is planned that this will be required for exporting once the code
It is planned that this will be required for exporting once the code
settles down a bit.
settles down a bit.
[mandatory]
s_export_op is now required for exporting a filesystem.
isofs, ext2, ext3, resierfs, fat
can be used as examples of very different filesystems.
arch/alpha/vmlinux.lds.in
View file @
b446946d
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
OUTPUT_FORMAT("elf64-alpha")
OUTPUT_FORMAT("elf64-alpha")
ENTRY(__start)
ENTRY(__start)
PHDRS { kernel PT_LOAD ; }
PHDRS { kernel PT_LOAD ; }
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
#ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS
#ifdef CONFIG_ALPHA_LEGACY_START_ADDRESS
...
...
arch/arm/vmlinux-armo.lds.in
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
*/
*/
OUTPUT_ARCH(arm)
OUTPUT_ARCH(arm)
ENTRY(stext)
ENTRY(stext)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = TEXTADDR;
. = TEXTADDR;
...
...
arch/arm/vmlinux-armv.lds.in
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
*/
*/
OUTPUT_ARCH(arm)
OUTPUT_ARCH(arm)
ENTRY(stext)
ENTRY(stext)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = TEXTADDR;
. = TEXTADDR;
...
...
arch/cris/cris.ld
View file @
b446946d
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
* the kernel has booted.
* the kernel has booted.
*/
*/
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
. = @CONFIG_ETRAX_DRAM_VIRTUAL_BASE@;
. = @CONFIG_ETRAX_DRAM_VIRTUAL_BASE@;
...
...
arch/i386/pci/Makefile
View file @
b446946d
...
@@ -24,6 +24,4 @@ endif # CONFIG_MULTIQUAD
...
@@ -24,6 +24,4 @@ endif # CONFIG_MULTIQUAD
obj-y
+=
irq.o common.o
obj-y
+=
irq.o common.o
endif
# CONFIG_VISWS
endif
# CONFIG_VISWS
export-objs
+=
$
(
obj-y
)
include
$(TOPDIR)/Rules.make
include
$(TOPDIR)/Rules.make
arch/i386/vmlinux.lds
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)
OUTPUT_ARCH(i386)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
. = 0xC0000000 + 0x100000;
. = 0xC0000000 + 0x100000;
...
...
arch/ia64/vmlinux.lds.S
View file @
b446946d
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
OUTPUT_FORMAT
("
elf64
-
ia64
-
little
")
OUTPUT_FORMAT
("
elf64
-
ia64
-
little
")
OUTPUT_ARCH
(
ia64
)
OUTPUT_ARCH
(
ia64
)
ENTRY
(
phys_start
)
ENTRY
(
phys_start
)
jiffies
=
jiffies_64
;
SECTIONS
SECTIONS
{
{
/
*
Sections
to
be
discarded
*/
/
*
Sections
to
be
discarded
*/
...
...
arch/m68k/vmlinux-sun3.lds
View file @
b446946d
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
OUTPUT_ARCH(m68k)
OUTPUT_ARCH(m68k)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = 0xE004000;
. = 0xE004000;
...
...
arch/m68k/vmlinux.lds
View file @
b446946d
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
OUTPUT_ARCH(m68k)
OUTPUT_ARCH(m68k)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = 0x1000;
. = 0x1000;
...
...
arch/mips64/ld.script.elf64
View file @
b446946d
OUTPUT_ARCH(mips)
OUTPUT_ARCH(mips)
ENTRY(kernel_entry)
ENTRY(kernel_entry)
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
/* Read-only sections, merged into text segment: */
/* Read-only sections, merged into text segment: */
...
...
arch/parisc/vmlinux.lds
View file @
b446946d
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
OUTPUT_FORMAT("elf32-hppa")
OUTPUT_FORMAT("elf32-hppa")
OUTPUT_ARCH(hppa)
OUTPUT_ARCH(hppa)
ENTRY(_stext)
ENTRY(_stext)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
...
...
arch/ppc/vmlinux.lds
View file @
b446946d
...
@@ -2,6 +2,7 @@ OUTPUT_ARCH(powerpc)
...
@@ -2,6 +2,7 @@ OUTPUT_ARCH(powerpc)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
/* Do we need any of these for elf?
/* Do we need any of these for elf?
__DYNAMIC = 0; */
__DYNAMIC = 0; */
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
/* Read-only sections, merged into text segment: */
/* Read-only sections, merged into text segment: */
...
...
arch/ppc64/vmlinux.lds
View file @
b446946d
...
@@ -2,6 +2,7 @@ OUTPUT_ARCH(powerpc)
...
@@ -2,6 +2,7 @@ OUTPUT_ARCH(powerpc)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
/* Do we need any of these for elf?
/* Do we need any of these for elf?
__DYNAMIC = 0; */
__DYNAMIC = 0; */
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
/* Read-only sections, merged into text segment: */
/* Read-only sections, merged into text segment: */
...
...
arch/s390/vmlinux-shared.lds
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
OUTPUT_ARCH(s390)
OUTPUT_ARCH(s390)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = 0x00000000;
. = 0x00000000;
...
...
arch/s390/vmlinux.lds
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
OUTPUT_ARCH(s390)
OUTPUT_ARCH(s390)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = 0x00000000;
. = 0x00000000;
...
...
arch/s390x/vmlinux-shared.lds
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
OUTPUT_ARCH(s390)
OUTPUT_ARCH(s390)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
. = 0x00000000;
. = 0x00000000;
...
...
arch/s390x/vmlinux.lds
View file @
b446946d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
OUTPUT_ARCH(s390)
OUTPUT_ARCH(s390)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
. = 0x00000000;
. = 0x00000000;
...
...
arch/sh/vmlinux.lds.S
View file @
b446946d
...
@@ -5,8 +5,10 @@
...
@@ -5,8 +5,10 @@
#include <linux/config.h>
#include <linux/config.h>
#ifdef CONFIG_CPU_LITTLE_ENDIAN
#ifdef CONFIG_CPU_LITTLE_ENDIAN
OUTPUT_FORMAT
("
elf32
-
sh
-
linux
",
"
elf32
-
sh
-
linux
",
"elf32-sh-linux"
)
OUTPUT_FORMAT
("
elf32
-
sh
-
linux
",
"
elf32
-
sh
-
linux
",
"elf32-sh-linux"
)
jiffies
=
jiffies_64
;
#else
#else
OUTPUT_FORMAT
("
elf32
-
shbig
-
linux
",
"
elf32
-
shbig
-
linux
",
"elf32-shbig-linux"
)
OUTPUT_FORMAT
("
elf32
-
shbig
-
linux
",
"
elf32
-
shbig
-
linux
",
"elf32-shbig-linux"
)
jiffies
=
jiffies_64
+
4
;
#endif
#endif
OUTPUT_ARCH
(
sh
)
OUTPUT_ARCH
(
sh
)
ENTRY
(
_start
)
ENTRY
(
_start
)
...
...
arch/sparc/kernel/ptrace.c
View file @
b446946d
...
@@ -234,29 +234,13 @@ static inline void write_sunos_user(struct pt_regs *regs, unsigned long offset,
...
@@ -234,29 +234,13 @@ static inline void write_sunos_user(struct pt_regs *regs, unsigned long offset,
#ifdef DEBUG_PTRACE
#ifdef DEBUG_PTRACE
char
*
pt_rq
[]
=
{
char
*
pt_rq
[]
=
{
"TRACEME"
,
/* 0 */
"TRACEME"
,
"PEEKTEXT"
,
"PEEKDATA"
,
"PEEKUSR"
,
"PEEKTEXT"
,
/* 4 */
"POKETEXT"
,
"POKEDATA"
,
"POKEUSR"
,
"CONT"
,
"PEEKDATA"
,
/* 8 */
"KILL"
,
"SINGLESTEP"
,
"SUNATTACH"
,
"SUNDETACH"
,
"PEEKUSR"
,
/* 12 */
"GETREGS"
,
"SETREGS"
,
"GETFPREGS"
,
"SETFPREGS"
,
"POKETEXT"
,
/* 16 */
"READDATA"
,
"WRITEDATA"
,
"READTEXT"
,
"WRITETEXT"
,
"POKEDATA"
,
/* 20 */
"GETFPAREGS"
,
"SETFPAREGS"
,
"unknown"
,
"unknown"
,
"POKEUSR"
,
/* 24 */
"SYSCALL"
,
""
"CONT"
,
"KILL"
,
"SINGLESTEP"
,
"SUNATTACH"
,
"SUNDETACH"
,
"GETREGS"
,
"SETREGS"
,
"GETFPREGS"
,
"SETFPREGS"
,
"READDATA"
,
"WRITEDATA"
,
"READTEXT"
,
"WRITETEXT"
,
"GETFPAREGS"
,
"SETFPAREGS"
,
""
};
};
#endif
#endif
...
@@ -285,7 +269,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
...
@@ -285,7 +269,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
{
{
char
*
s
;
char
*
s
;
if
((
request
>
0
)
&&
(
request
<
21
))
if
((
request
>
=
0
)
&&
(
request
<=
24
))
s
=
pt_rq
[
request
];
s
=
pt_rq
[
request
];
else
else
s
=
"unknown"
;
s
=
"unknown"
;
...
...
arch/sparc/kernel/sys_sunos.c
View file @
b446946d
...
@@ -1048,8 +1048,8 @@ static inline int check_nonblock(int ret, int fd)
...
@@ -1048,8 +1048,8 @@ static inline int check_nonblock(int ret, int fd)
return
ret
;
return
ret
;
}
}
extern
asmlinkage
in
t
sys_read
(
unsigned
int
fd
,
char
*
buf
,
int
count
);
extern
asmlinkage
ssize_
t
sys_read
(
unsigned
int
fd
,
char
*
buf
,
int
count
);
extern
asmlinkage
in
t
sys_write
(
unsigned
int
fd
,
char
*
buf
,
int
count
);
extern
asmlinkage
ssize_
t
sys_write
(
unsigned
int
fd
,
char
*
buf
,
int
count
);
extern
asmlinkage
int
sys_recv
(
int
fd
,
void
*
ubuf
,
int
size
,
unsigned
flags
);
extern
asmlinkage
int
sys_recv
(
int
fd
,
void
*
ubuf
,
int
size
,
unsigned
flags
);
extern
asmlinkage
int
sys_send
(
int
fd
,
void
*
buff
,
int
len
,
unsigned
flags
);
extern
asmlinkage
int
sys_send
(
int
fd
,
void
*
buff
,
int
len
,
unsigned
flags
);
extern
asmlinkage
int
sys_accept
(
int
fd
,
struct
sockaddr
*
sa
,
int
*
addrlen
);
extern
asmlinkage
int
sys_accept
(
int
fd
,
struct
sockaddr
*
sa
,
int
*
addrlen
);
...
...
arch/sparc/vmlinux.lds
View file @
b446946d
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
OUTPUT_ARCH(sparc)
OUTPUT_ARCH(sparc)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64 + 4;
SECTIONS
SECTIONS
{
{
. = 0x10000 + SIZEOF_HEADERS;
. = 0x10000 + SIZEOF_HEADERS;
...
...
arch/sparc64/kernel/pci.c
View file @
b446946d
...
@@ -181,11 +181,11 @@ extern void rs_init(void);
...
@@ -181,11 +181,11 @@ extern void rs_init(void);
extern
void
clock_probe
(
void
);
extern
void
clock_probe
(
void
);
extern
void
power_init
(
void
);
extern
void
power_init
(
void
);
static
void
__init
pcibios_init
(
void
)
static
int
__init
pcibios_init
(
void
)
{
{
pci_controller_probe
();
pci_controller_probe
();
if
(
pci_controller_root
==
NULL
)
if
(
pci_controller_root
==
NULL
)
return
;
return
0
;
pci_scan_each_controller_bus
();
pci_scan_each_controller_bus
();
...
@@ -197,6 +197,8 @@ static void __init pcibios_init(void)
...
@@ -197,6 +197,8 @@ static void __init pcibios_init(void)
rs_init
();
rs_init
();
clock_probe
();
clock_probe
();
power_init
();
power_init
();
return
0
;
}
}
subsys_initcall
(
pcibios_init
);
subsys_initcall
(
pcibios_init
);
...
...
arch/sparc64/kernel/process.c
View file @
b446946d
...
@@ -586,13 +586,6 @@ void fault_in_user_windows(void)
...
@@ -586,13 +586,6 @@ void fault_in_user_windows(void)
* under SunOS are nothing short of bletcherous:
* under SunOS are nothing short of bletcherous:
* Parent --> %o0 == childs pid, %o1 == 0
* Parent --> %o0 == childs pid, %o1 == 0
* Child --> %o0 == parents pid, %o1 == 1
* Child --> %o0 == parents pid, %o1 == 1
*
* NOTE: We have a separate fork kpsr/kwim because
* the parent could change these values between
* sys_fork invocation and when we reach here
* if the parent should sleep while trying to
* allocate the task_struct and kernel stack in
* do_fork().
*/
*/
int
copy_thread
(
int
nr
,
unsigned
long
clone_flags
,
unsigned
long
sp
,
int
copy_thread
(
int
nr
,
unsigned
long
clone_flags
,
unsigned
long
sp
,
unsigned
long
unused
,
unsigned
long
unused
,
...
...
arch/sparc64/kernel/ptrace.c
View file @
b446946d
...
@@ -78,29 +78,13 @@ pt_os_succ_return (struct pt_regs *regs, unsigned long val, long *addr)
...
@@ -78,29 +78,13 @@ pt_os_succ_return (struct pt_regs *regs, unsigned long val, long *addr)
#ifdef DEBUG_PTRACE
#ifdef DEBUG_PTRACE
char
*
pt_rq
[]
=
{
char
*
pt_rq
[]
=
{
"TRACEME"
,
/* 0 */
"TRACEME"
,
"PEEKTEXT"
,
"PEEKDATA"
,
"PEEKUSR"
,
"PEEKTEXT"
,
/* 4 */
"POKETEXT"
,
"POKEDATA"
,
"POKEUSR"
,
"CONT"
,
"PEEKDATA"
,
/* 8 */
"KILL"
,
"SINGLESTEP"
,
"SUNATTACH"
,
"SUNDETACH"
,
"PEEKUSR"
,
/* 12 */
"GETREGS"
,
"SETREGS"
,
"GETFPREGS"
,
"SETFPREGS"
,
"POKETEXT"
,
/* 16 */
"READDATA"
,
"WRITEDATA"
,
"READTEXT"
,
"WRITETEXT"
,
"POKEDATA"
,
/* 20 */
"GETFPAREGS"
,
"SETFPAREGS"
,
"unknown"
,
"unknown"
,
"POKEUSR"
,
/* 24 */
"SYSCALL"
,
""
"CONT"
,
"KILL"
,
"SINGLESTEP"
,
"SUNATTACH"
,
"SUNDETACH"
,
"GETREGS"
,
"SETREGS"
,
"GETFPREGS"
,
"SETFPREGS"
,
"READDATA"
,
"WRITEDATA"
,
"READTEXT"
,
"WRITETEXT"
,
"GETFPAREGS"
,
"SETFPAREGS"
,
""
};
};
#endif
#endif
...
@@ -134,7 +118,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
...
@@ -134,7 +118,7 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
{
{
char
*
s
;
char
*
s
;
if
((
request
>
0
)
&&
(
request
<
21
))
if
((
request
>
=
0
)
&&
(
request
<=
24
))
s
=
pt_rq
[
request
];
s
=
pt_rq
[
request
];
else
else
s
=
"unknown"
;
s
=
"unknown"
;
...
...
arch/sparc64/kernel/sparc64_ksyms.c
View file @
b446946d
...
@@ -372,6 +372,10 @@ void VISenter(void);
...
@@ -372,6 +372,10 @@ void VISenter(void);
/* RAID code needs this */
/* RAID code needs this */
EXPORT_SYMBOL_NOVERS
(
VISenter
);
EXPORT_SYMBOL_NOVERS
(
VISenter
);
extern
void
batten_down_hatches
(
void
);
/* for input/keybdev */
EXPORT_SYMBOL
(
batten_down_hatches
);
#ifdef CONFIG_DEBUG_BUGVERBOSE
#ifdef CONFIG_DEBUG_BUGVERBOSE
EXPORT_SYMBOL
(
do_BUG
);
EXPORT_SYMBOL
(
do_BUG
);
#endif
#endif
arch/sparc64/kernel/sys_sunos32.c
View file @
b446946d
...
@@ -1198,8 +1198,8 @@ static inline int check_nonblock(int ret, int fd)
...
@@ -1198,8 +1198,8 @@ static inline int check_nonblock(int ret, int fd)
return
ret
;
return
ret
;
}
}
extern
asmlinkage
in
t
sys_read
(
unsigned
int
fd
,
char
*
buf
,
unsigned
long
count
);
extern
asmlinkage
ssize_
t
sys_read
(
unsigned
int
fd
,
char
*
buf
,
unsigned
long
count
);
extern
asmlinkage
in
t
sys_write
(
unsigned
int
fd
,
char
*
buf
,
unsigned
long
count
);
extern
asmlinkage
ssize_
t
sys_write
(
unsigned
int
fd
,
char
*
buf
,
unsigned
long
count
);
extern
asmlinkage
int
sys_recv
(
int
fd
,
void
*
ubuf
,
size_t
size
,
unsigned
flags
);
extern
asmlinkage
int
sys_recv
(
int
fd
,
void
*
ubuf
,
size_t
size
,
unsigned
flags
);
extern
asmlinkage
int
sys_send
(
int
fd
,
void
*
buff
,
size_t
len
,
unsigned
flags
);
extern
asmlinkage
int
sys_send
(
int
fd
,
void
*
buff
,
size_t
len
,
unsigned
flags
);
extern
asmlinkage
int
sys_accept
(
int
fd
,
struct
sockaddr
*
sa
,
int
*
addrlen
);
extern
asmlinkage
int
sys_accept
(
int
fd
,
struct
sockaddr
*
sa
,
int
*
addrlen
);
...
...
arch/sparc64/vmlinux.lds
View file @
b446946d
...
@@ -3,6 +3,7 @@ OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
...
@@ -3,6 +3,7 @@ OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
OUTPUT_ARCH(sparc:v9a)
OUTPUT_ARCH(sparc:v9a)
ENTRY(_start)
ENTRY(_start)
jiffies = jiffies_64;
SECTIONS
SECTIONS
{
{
swapper_pmd_dir = 0x0000000000402000;
swapper_pmd_dir = 0x0000000000402000;
...
...
arch/x86_64/vmlinux.lds
View file @
b446946d
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
*/
*/
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
OUTPUT_ARCH(i386:x86-64)
jiffies = jiffies_64;
ENTRY(_start)
ENTRY(_start)
SECTIONS
SECTIONS
{
{
...
...
drivers/base/Makefile
View file @
b446946d
...
@@ -2,6 +2,6 @@ O_TARGET := base.o
...
@@ -2,6 +2,6 @@ O_TARGET := base.o
obj-y
:=
core.o sys.o interface.o fs.o power.o
obj-y
:=
core.o sys.o interface.o fs.o power.o
export-objs
:=
$
(
obj-y
)
export-objs
:=
core.o fs.o power.o sys.o
include
$(TOPDIR)/Rules.make
include
$(TOPDIR)/Rules.make
drivers/pci/Makefile
View file @
b446946d
...
@@ -11,6 +11,8 @@
...
@@ -11,6 +11,8 @@
O_TARGET
:=
driver.o
O_TARGET
:=
driver.o
export-objs
:=
access.o hotplug.o pci-driver.o pci.o pool.o probe.o proc.o search.o
obj-y
+=
access.o probe.o pci.o pool.o quirks.o
\
obj-y
+=
access.o probe.o pci.o pool.o quirks.o
\
compat.o names.o pci-driver.o search.o
compat.o names.o pci-driver.o search.o
obj-$(CONFIG_PM)
+=
power.o
obj-$(CONFIG_PM)
+=
power.o
...
@@ -37,8 +39,6 @@ ifndef CONFIG_X86
...
@@ -37,8 +39,6 @@ ifndef CONFIG_X86
obj-y
+=
syscall.o
obj-y
+=
syscall.o
endif
endif
export-objs
:=
$
(
obj-y
)
include
$(TOPDIR)/Rules.make
include
$(TOPDIR)/Rules.make
names.o
:
names.c devlist.h classlist.h
names.o
:
names.c devlist.h classlist.h
...
...
drivers/video/aty/mach64_gx.c
View file @
b446946d
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/fb.h>
#include <linux/fb.h>
#include <linux/sched.h>
#include <asm/io.h>
#include <asm/io.h>
...
...
fs/isofs/inode.c
View file @
b446946d
...
@@ -131,6 +131,21 @@ static struct super_operations isofs_sops = {
...
@@ -131,6 +131,21 @@ static struct super_operations isofs_sops = {
statfs:
isofs_statfs
,
statfs:
isofs_statfs
,
};
};
/* the export_operations structure for describing
* how to export (e.g. via kNFSd) is deliberately
* empty.
* This means that the filesystem want to use iget
* to map an inode number into an inode.
* The lack of a get_parent operation means that
* if something isn't in the cache, then you cannot
* access it.
* It should be possible to write a get_parent,
* but it would be a bit hairy...
*/
static
struct
export_operations
isofs_export_ops
=
{
};
static
struct
dentry_operations
isofs_dentry_ops
[]
=
{
static
struct
dentry_operations
isofs_dentry_ops
[]
=
{
{
{
d_hash:
isofs_hash
,
d_hash:
isofs_hash
,
...
@@ -786,6 +801,7 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
...
@@ -786,6 +801,7 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
}
}
#endif
#endif
s
->
s_op
=
&
isofs_sops
;
s
->
s_op
=
&
isofs_sops
;
s
->
s_export_op
=
&
isofs_export_ops
;
sbi
->
s_mapping
=
opt
.
map
;
sbi
->
s_mapping
=
opt
.
map
;
sbi
->
s_rock
=
(
opt
.
rock
==
'y'
?
2
:
0
);
sbi
->
s_rock
=
(
opt
.
rock
==
'y'
?
2
:
0
);
sbi
->
s_rock_offset
=
-
1
;
/* initial offset, will guess until SP is found*/
sbi
->
s_rock_offset
=
-
1
;
/* initial offset, will guess until SP is found*/
...
...
fs/jfs/jfs_txnmgr.c
View file @
b446946d
...
@@ -1155,19 +1155,30 @@ int txCommit(tid_t tid, /* transaction identifier */
...
@@ -1155,19 +1155,30 @@ int txCommit(tid_t tid, /* transaction identifier */
jfs_ip
=
JFS_IP
(
ip
);
jfs_ip
=
JFS_IP
(
ip
);
/*
/*
* BUGBUG - Should we call filemap_fdatawrite here instead
* BUGBUG - This code has temporarily been removed. The
* of fsync_inode_data?
* intent is to ensure that any file data is written before
* If we do, we have a deadlock condition since we may end
* the metadata is committed to the journal. This prevents
* up recursively calling jfs_get_block with the IWRITELOCK
* uninitialized data from appearing in a file after the
* held. We may be able to do away with IWRITELOCK while
* journal has been replayed. (The uninitialized data
* committing transactions and use i_sem instead.
* could be sensitive data removed by another user.)
*
* The problem now is that we are holding the IWRITELOCK
* on the inode, and calling filemap_fdatawrite on an
* unmapped page will cause a deadlock in jfs_get_block.
*
* The long term solution is to pare down the use of
* IWRITELOCK. We are currently holding it too long.
* We could also be smarter about which data pages need
* to be written before the transaction is committed and
* when we don't need to worry about it at all.
*
* if ((!S_ISDIR(ip->i_mode))
* && (tblk->flag & COMMIT_DELETE) == 0) {
* filemap_fdatawait(ip->i_mapping);
* filemap_fdatawrite(ip->i_mapping);
* filemap_fdatawait(ip->i_mapping);
* }
*/
*/
if
((
!
S_ISDIR
(
ip
->
i_mode
))
&&
(
tblk
->
flag
&
COMMIT_DELETE
)
==
0
)
{
filemap_fdatawait
(
ip
->
i_mapping
);
filemap_fdatawrite
(
ip
->
i_mapping
);
filemap_fdatawait
(
ip
->
i_mapping
);
}
/*
/*
* Mark inode as not dirty. It will still be on the dirty
* Mark inode as not dirty. It will still be on the dirty
...
...
fs/nfsd/export.c
View file @
b446946d
...
@@ -313,15 +313,12 @@ exp_export(struct nfsctl_export *nxp)
...
@@ -313,15 +313,12 @@ exp_export(struct nfsctl_export *nxp)
* either a device number (so FS_REQUIRES_DEV needed)
* either a device number (so FS_REQUIRES_DEV needed)
* or an FSID number (so NFSEXP_FSID needed).
* or an FSID number (so NFSEXP_FSID needed).
* 2: We must be able to find an inode from a filehandle.
* 2: We must be able to find an inode from a filehandle.
* either using fh_to_dentry (prefered)
* This means that s_export_op must be set.
* or using read_inode (the hack).
*/
*/
if
(((
inode
->
i_sb
->
s_type
->
fs_flags
&
FS_REQUIRES_DEV
)
if
(((
inode
->
i_sb
->
s_type
->
fs_flags
&
FS_REQUIRES_DEV
)
||
(
nxp
->
ex_flags
&
NFSEXP_FSID
))
||
(
nxp
->
ex_flags
&
NFSEXP_FSID
))
&&
&&
(
inode
->
i_sb
->
s_op
->
read_inode
inode
->
i_sb
->
s_export_op
)
||
inode
->
i_sb
->
s_export_op
||
inode
->
i_sb
->
s_op
->
fh_to_dentry
))
/* Ok, we can export it */
;
/* Ok, we can export it */
;
else
{
else
{
dprintk
(
"exp_export: export of invalid fs type.
\n
"
);
dprintk
(
"exp_export: export of invalid fs type.
\n
"
);
...
...
fs/nfsd/nfsfh.c
View file @
b446946d
...
@@ -34,474 +34,6 @@ extern struct export_operations export_op_default;
...
@@ -34,474 +34,6 @@ extern struct export_operations export_op_default;
#define CALL(ops,fun) ((ops->fun)?(ops->fun):export_op_default.fun)
#define CALL(ops,fun) ((ops->fun)?(ops->fun):export_op_default.fun)
struct
nfsd_getdents_callback
{
char
*
name
;
/* name that was found. It already points to a buffer NAME_MAX+1 is size */
unsigned
long
ino
;
/* the inum we are looking for */
int
found
;
/* inode matched? */
int
sequence
;
/* sequence counter */
};
/*
* A rather strange filldir function to capture
* the name matching the specified inode number.
*/
static
int
filldir_one
(
void
*
__buf
,
const
char
*
name
,
int
len
,
loff_t
pos
,
ino_t
ino
,
unsigned
int
d_type
)
{
struct
nfsd_getdents_callback
*
buf
=
__buf
;
int
result
=
0
;
buf
->
sequence
++
;
#ifdef NFSD_DEBUG_VERBOSE
dprintk
(
"filldir_one: seq=%d, ino=%ld, name=%s
\n
"
,
buf
->
sequence
,
ino
,
name
);
#endif
if
(
buf
->
ino
==
ino
)
{
memcpy
(
buf
->
name
,
name
,
len
);
buf
->
name
[
len
]
=
'\0'
;
buf
->
found
=
1
;
result
=
-
1
;
}
return
result
;
}
static
int
nfsd_get_name
(
struct
dentry
*
dentry
,
char
*
name
,
struct
dentry
*
child
)
{
struct
inode
*
dir
=
dentry
->
d_inode
;
int
error
;
struct
file
file
;
struct
nfsd_getdents_callback
buffer
;
error
=
-
ENOTDIR
;
if
(
!
dir
||
!
S_ISDIR
(
dir
->
i_mode
))
goto
out
;
error
=
-
EINVAL
;
if
(
!
dir
->
i_fop
)
goto
out
;
/*
* Open the directory ...
*/
error
=
init_private_file
(
&
file
,
dentry
,
FMODE_READ
);
if
(
error
)
goto
out
;
error
=
-
EINVAL
;
if
(
!
file
.
f_op
->
readdir
)
goto
out_close
;
buffer
.
name
=
name
;
buffer
.
ino
=
child
->
d_inode
->
i_ino
;
buffer
.
found
=
0
;
buffer
.
sequence
=
0
;
while
(
1
)
{
int
old_seq
=
buffer
.
sequence
;
error
=
vfs_readdir
(
&
file
,
filldir_one
,
&
buffer
);
if
(
error
<
0
)
break
;
error
=
0
;
if
(
buffer
.
found
)
break
;
error
=
-
ENOENT
;
if
(
old_seq
==
buffer
.
sequence
)
break
;
}
out_close:
if
(
file
.
f_op
->
release
)
file
.
f_op
->
release
(
dir
,
&
file
);
out:
return
error
;
}
static
struct
dentry
*
nfsd_iget
(
struct
super_block
*
sb
,
unsigned
long
ino
,
__u32
generation
)
{
/* iget isn't really right if the inode is currently unallocated!!
* This should really all be done inside each filesystem
*
* ext2fs' read_inode has been strengthed to return a bad_inode if the inode
* had been deleted.
*
* Currently we don't know the generation for parent directory, so a generation
* of 0 means "accept any"
*/
struct
inode
*
inode
;
struct
dentry
*
result
;
if
(
ino
==
0
)
return
ERR_PTR
(
-
ESTALE
);
inode
=
iget
(
sb
,
ino
);
if
(
inode
==
NULL
)
return
ERR_PTR
(
-
ENOMEM
);
if
(
is_bad_inode
(
inode
)
||
(
generation
&&
inode
->
i_generation
!=
generation
)
)
{
/* we didn't find the right inode.. */
dprintk
(
"fh_verify: Inode %lu, Bad count: %d %d or version %u %u
\n
"
,
inode
->
i_ino
,
inode
->
i_nlink
,
atomic_read
(
&
inode
->
i_count
),
inode
->
i_generation
,
generation
);
iput
(
inode
);
return
ERR_PTR
(
-
ESTALE
);
}
/* now to find a dentry.
* If possible, get a well-connected one
*/
result
=
d_alloc_anon
(
inode
);
if
(
!
result
)
{
iput
(
inode
);
return
ERR_PTR
(
-
ENOMEM
);
}
result
->
d_vfs_flags
|=
DCACHE_REFERENCED
;
return
result
;
}
static
struct
dentry
*
nfsd_get_dentry
(
struct
super_block
*
sb
,
__u32
*
fh
,
int
len
,
int
fhtype
,
int
parent
)
{
if
(
sb
->
s_op
->
fh_to_dentry
)
return
sb
->
s_op
->
fh_to_dentry
(
sb
,
fh
,
len
,
fhtype
,
parent
);
switch
(
fhtype
)
{
case
1
:
if
(
len
<
2
)
break
;
if
(
parent
)
break
;
return
nfsd_iget
(
sb
,
fh
[
0
],
fh
[
1
]);
case
2
:
if
(
len
<
3
)
break
;
if
(
parent
)
return
nfsd_iget
(
sb
,
fh
[
2
],
0
);
return
nfsd_iget
(
sb
,
fh
[
0
],
fh
[
1
]);
default:
break
;
}
return
ERR_PTR
(
-
EINVAL
);
}
/* this routine links an IS_ROOT dentry into the dcache tree. It gains "parent"
* as a parent and "name" as a name
* It should possibly go in dcache.c
*/
int
d_splice
(
struct
dentry
*
target
,
struct
dentry
*
parent
,
struct
qstr
*
name
)
{
struct
dentry
*
tdentry
;
#ifdef NFSD_PARANOIA
if
(
!
IS_ROOT
(
target
))
printk
(
"nfsd: d_splice with no-root target: %s/%s
\n
"
,
parent
->
d_name
.
name
,
name
->
name
);
if
(
!
(
target
->
d_flags
&
DCACHE_DISCONNECTED
))
printk
(
"nfsd: d_splice with non-DISCONNECTED target: %s/%s
\n
"
,
parent
->
d_name
.
name
,
name
->
name
);
#endif
tdentry
=
d_alloc
(
parent
,
name
);
if
(
tdentry
==
NULL
)
return
-
ENOMEM
;
d_move
(
target
,
tdentry
);
d_rehash
(
target
);
dput
(
tdentry
);
/* if parent is properly connected, then we can assert that
* the children are connected, but it must be a singluar (non-forking)
* branch
*/
if
(
!
(
parent
->
d_flags
&
DCACHE_DISCONNECTED
))
{
while
(
target
)
{
target
->
d_flags
&=
~
DCACHE_DISCONNECTED
;
parent
=
target
;
spin_lock
(
&
dcache_lock
);
if
(
list_empty
(
&
parent
->
d_subdirs
))
target
=
NULL
;
else
{
target
=
list_entry
(
parent
->
d_subdirs
.
next
,
struct
dentry
,
d_child
);
#ifdef NFSD_PARANOIA
/* must be only child */
if
(
target
->
d_child
.
next
!=
&
parent
->
d_subdirs
||
target
->
d_child
.
prev
!=
&
parent
->
d_subdirs
)
{
printk
(
"nfsd: d_splice found non-singular disconnected branch: %s/%s
\n
"
,
parent
->
d_name
.
name
,
target
->
d_name
.
name
);
spin_unlock
(
&
dcache_lock
);
return
0
;
}
#endif
}
spin_unlock
(
&
dcache_lock
);
}
}
return
0
;
}
/* this routine finds the dentry of the parent of a given directory
* it assumes lookup("..") works.
*/
struct
dentry
*
nfsd_findparent
(
struct
dentry
*
child
)
{
struct
dentry
*
tdentry
,
*
pdentry
;
tdentry
=
d_alloc
(
child
,
&
(
const
struct
qstr
)
{
".."
,
2
,
0
});
if
(
!
tdentry
)
return
ERR_PTR
(
-
ENOMEM
);
/* I'm going to assume that if the returned dentry is different, then
* it is well connected. But nobody returns different dentrys do they?
*/
down
(
&
child
->
d_inode
->
i_sem
);
pdentry
=
child
->
d_inode
->
i_op
->
lookup
(
child
->
d_inode
,
tdentry
);
up
(
&
child
->
d_inode
->
i_sem
);
d_drop
(
tdentry
);
/* we never want ".." hashed */
if
(
!
pdentry
&&
tdentry
->
d_inode
==
NULL
)
{
/* File system cannot find ".." ... sad but possible */
pdentry
=
ERR_PTR
(
-
EINVAL
);
}
if
(
!
pdentry
)
{
/* I don't want to return a ".." dentry.
* I would prefer to return an unconnected "IS_ROOT" dentry,
* though a properly connected dentry is even better
*/
/* if first or last of alias list is not tdentry, use that
* else make a root dentry
*/
struct
list_head
*
aliases
=
&
tdentry
->
d_inode
->
i_dentry
;
spin_lock
(
&
dcache_lock
);
if
(
aliases
->
next
!=
aliases
)
{
pdentry
=
list_entry
(
aliases
->
next
,
struct
dentry
,
d_alias
);
if
(
pdentry
==
tdentry
)
pdentry
=
list_entry
(
aliases
->
prev
,
struct
dentry
,
d_alias
);
if
(
pdentry
==
tdentry
)
pdentry
=
NULL
;
if
(
pdentry
)
dget_locked
(
pdentry
);
}
spin_unlock
(
&
dcache_lock
);
if
(
pdentry
==
NULL
)
{
pdentry
=
d_alloc_root
(
tdentry
->
d_inode
);
if
(
pdentry
)
{
igrab
(
tdentry
->
d_inode
);
pdentry
->
d_flags
|=
DCACHE_DISCONNECTED
;
}
}
if
(
pdentry
==
NULL
)
pdentry
=
ERR_PTR
(
-
ENOMEM
);
}
dput
(
tdentry
);
/* it is not hashed, it will be discarded */
return
pdentry
;
}
static
struct
dentry
*
splice
(
struct
dentry
*
child
,
struct
dentry
*
parent
)
{
int
err
=
0
,
nerr
;
struct
qstr
qs
;
char
namebuf
[
256
];
struct
list_head
*
lp
;
/* child is an IS_ROOT (anonymous) dentry, but it is hypothesised that
* it should be a child of parent.
* We see if we can find a name and, if we can - splice it in.
* We lookup the name before locking (i_sem) the directory as namelookup
* also claims i_sem. If the name gets changed then we will loop around
* and try again in find_fh_dentry.
*/
nerr
=
nfsd_get_name
(
parent
,
namebuf
,
child
);
/*
* We now claim the parent i_sem so that no-one else tries to create
* a dentry in the parent while we are.
*/
down
(
&
parent
->
d_inode
->
i_sem
);
/* Now, things might have changed while we waited.
* Possibly a friendly filesystem found child and spliced it in in response
* to a lookup (though nobody does this yet). In this case, just succeed.
*/
if
(
child
->
d_parent
==
parent
)
goto
out
;
/* Possibly a new dentry has been made for this child->d_inode in
* parent by a lookup. In this case return that dentry. Caller must
* notice and act accordingly
*/
spin_lock
(
&
dcache_lock
);
list_for_each
(
lp
,
&
child
->
d_inode
->
i_dentry
)
{
struct
dentry
*
tmp
=
list_entry
(
lp
,
struct
dentry
,
d_alias
);
if
(
!
list_empty
(
&
tmp
->
d_hash
)
&&
tmp
->
d_parent
==
parent
)
{
child
=
dget_locked
(
tmp
);
spin_unlock
(
&
dcache_lock
);
goto
out
;
}
}
spin_unlock
(
&
dcache_lock
);
/* now we need that name. If there was an error getting it, now is th
* time to bail out.
*/
if
((
err
=
nerr
))
goto
out
;
qs
.
name
=
namebuf
;
qs
.
len
=
strlen
(
namebuf
);
if
(
find_inode_number
(
parent
,
&
qs
)
!=
0
)
{
/* Now that IS odd. I wonder what it means... */
err
=
-
EEXIST
;
printk
(
"nfsd-fh: found a name that I didn't expect: %s/%s
\n
"
,
parent
->
d_name
.
name
,
qs
.
name
);
goto
out
;
}
err
=
d_splice
(
child
,
parent
,
&
qs
);
dprintk
(
"nfsd_fh: found name %s for ino %ld
\n
"
,
child
->
d_name
.
name
,
child
->
d_inode
->
i_ino
);
out:
up
(
&
parent
->
d_inode
->
i_sem
);
if
(
err
)
return
ERR_PTR
(
err
);
else
return
child
;
}
/*
* This is the basic lookup mechanism for turning an NFS file handle
* into a dentry.
* We use nfsd_iget and if that doesn't return a suitably connected dentry,
* we try to find the parent, and the parent of that and so-on until a
* connection if made.
*/
static
struct
dentry
*
find_fh_dentry
(
struct
super_block
*
sb
,
__u32
*
datap
,
int
len
,
int
fhtype
,
int
needpath
)
{
struct
dentry
*
dentry
,
*
result
=
NULL
;
struct
dentry
*
tmp
;
int
err
=
-
ESTALE
;
/* the sb->s_nfsd_free_path_sem semaphore is needed to make sure that only one unconnected (free)
* dcache path ever exists, as otherwise two partial paths might get
* joined together, which would be very confusing.
* If there is ever an unconnected non-root directory, then this lock
* must be held.
*/
nfsdstats
.
fh_lookup
++
;
/*
* Attempt to find the inode.
*/
retry:
down
(
&
sb
->
s_nfsd_free_path_sem
);
result
=
nfsd_get_dentry
(
sb
,
datap
,
len
,
fhtype
,
0
);
if
(
IS_ERR
(
result
)
||
!
(
result
->
d_flags
&
DCACHE_DISCONNECTED
)
||
(
!
S_ISDIR
(
result
->
d_inode
->
i_mode
)
&&
!
needpath
))
{
up
(
&
sb
->
s_nfsd_free_path_sem
);
err
=
PTR_ERR
(
result
);
if
(
IS_ERR
(
result
))
goto
err_out
;
if
((
result
->
d_flags
&
DCACHE_DISCONNECTED
))
nfsdstats
.
fh_anon
++
;
return
result
;
}
/* It's a directory, or we are required to confirm the file's
* location in the tree.
*/
dprintk
(
"nfs_fh: need to look harder for %s/%d
\n
"
,
sb
->
s_id
,
datap
[
0
]);
lock_kernel
();
if
(
!
S_ISDIR
(
result
->
d_inode
->
i_mode
))
{
nfsdstats
.
fh_nocache_nondir
++
;
/* need to iget dirino and make sure this inode is in that directory */
dentry
=
nfsd_get_dentry
(
sb
,
datap
,
len
,
fhtype
,
1
);
err
=
PTR_ERR
(
dentry
);
if
(
IS_ERR
(
dentry
))
goto
err_result
;
err
=
-
ESTALE
;
if
(
!
dentry
->
d_inode
||
!
S_ISDIR
(
dentry
->
d_inode
->
i_mode
))
{
goto
err_dentry
;
}
tmp
=
splice
(
result
,
dentry
);
err
=
PTR_ERR
(
tmp
);
if
(
IS_ERR
(
tmp
))
goto
err_dentry
;
if
(
tmp
!=
result
)
{
/* it is safe to just use tmp instead, but we must discard result first */
d_drop
(
result
);
dput
(
result
);
result
=
tmp
;
}
}
else
{
nfsdstats
.
fh_nocache_dir
++
;
dentry
=
dget
(
result
);
}
while
(
dentry
->
d_flags
&
DCACHE_DISCONNECTED
)
{
/* LOOP INVARIANT */
/* haven't found a place in the tree yet, but we do have a free path
* from dentry down to result, and dentry is a directory.
* Have a hold on dentry and result */
struct
dentry
*
pdentry
;
struct
inode
*
parent
;
pdentry
=
nfsd_findparent
(
dentry
);
err
=
PTR_ERR
(
pdentry
);
if
(
IS_ERR
(
pdentry
))
goto
err_dentry
;
parent
=
pdentry
->
d_inode
;
err
=
-
EACCES
;
if
(
!
parent
)
{
dput
(
pdentry
);
goto
err_dentry
;
}
tmp
=
splice
(
dentry
,
pdentry
);
if
(
tmp
!=
dentry
)
{
/* Something wrong. We need to drop the whole dentry->result path
* whatever it was
*/
/*
* FIXME: the loop below will do Bad Things(tm) if
* dentry (or one of its ancestors) become attached
* to the tree (e.g. due to VFAT-style alias handling)
*/
struct
dentry
*
d
;
for
(
d
=
result
;
d
;
d
=
(
d
->
d_parent
==
d
)
?
NULL
:
d
->
d_parent
)
d_drop
(
d
);
}
if
(
IS_ERR
(
tmp
))
{
err
=
PTR_ERR
(
tmp
);
dput
(
pdentry
);
goto
err_dentry
;
}
if
(
tmp
!=
dentry
)
{
/* we lost a race, try again
*/
dput
(
pdentry
);
dput
(
tmp
);
dput
(
dentry
);
dput
(
result
);
/* this will discard the whole free path, so we can up the semaphore */
up
(
&
sb
->
s_nfsd_free_path_sem
);
unlock_kernel
();
goto
retry
;
}
dput
(
dentry
);
dentry
=
pdentry
;
}
dput
(
dentry
);
up
(
&
sb
->
s_nfsd_free_path_sem
);
unlock_kernel
();
return
result
;
err_dentry:
dput
(
dentry
);
err_result:
dput
(
result
);
up
(
&
sb
->
s_nfsd_free_path_sem
);
unlock_kernel
();
err_out:
if
(
err
==
-
ESTALE
)
nfsdstats
.
fh_stale
++
;
return
ERR_PTR
(
err
);
}
/*
/*
* our acceptability function.
* our acceptability function.
* if NOSUBTREECHECK, accept anything
* if NOSUBTREECHECK, accept anything
...
@@ -660,15 +192,10 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
...
@@ -660,15 +192,10 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
dentry
=
dget
(
exp
->
ex_dentry
);
dentry
=
dget
(
exp
->
ex_dentry
);
else
{
else
{
struct
export_operations
*
nop
=
exp
->
ex_mnt
->
mnt_sb
->
s_export_op
;
struct
export_operations
*
nop
=
exp
->
ex_mnt
->
mnt_sb
->
s_export_op
;
if
(
nop
)
dentry
=
CALL
(
nop
,
decode_fh
)(
exp
->
ex_mnt
->
mnt_sb
,
dentry
=
CALL
(
nop
,
decode_fh
)(
exp
->
ex_mnt
->
mnt_sb
,
datap
,
data_left
,
datap
,
data_left
,
fileid_type
,
fileid_type
,
nfsd_acceptable
,
exp
);
nfsd_acceptable
,
exp
);
else
dentry
=
find_fh_dentry
(
exp
->
ex_dentry
->
d_sb
,
datap
,
data_left
,
fileid_type
,
!
(
exp
->
ex_flags
&
NFSEXP_NOSUBTREECHECK
));
}
}
if
(
dentry
==
NULL
)
if
(
dentry
==
NULL
)
goto
out
;
goto
out
;
...
@@ -716,56 +243,9 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
...
@@ -716,56 +243,9 @@ fh_verify(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, int access)
goto
out
;
goto
out
;
}
}
/*
* Security: Check that the export is valid for dentry <gam3@acm.org>
* This is only needed with subtree_check, and if export_operations is
* not being used - export_operations does the check via the "acceptable"
* callback
*/
error
=
0
;
if
(
exp
->
ex_mnt
->
mnt_sb
->
s_export_op
==
NULL
&&
!
(
exp
->
ex_flags
&
NFSEXP_NOSUBTREECHECK
))
{
if
(
exp
->
ex_dentry
!=
dentry
)
{
struct
dentry
*
tdentry
=
dentry
;
spin_lock
(
&
dcache_lock
);
do
{
tdentry
=
tdentry
->
d_parent
;
if
(
exp
->
ex_dentry
==
tdentry
)
break
;
/* executable only by root and we can't be root */
/*
* FIXME: permissions check is not that simple
*/
if
(
current
->
fsuid
&&
(
exp
->
ex_flags
&
NFSEXP_ROOTSQUASH
)
&&
!
(
tdentry
->
d_inode
->
i_uid
&&
(
tdentry
->
d_inode
->
i_mode
&
S_IXUSR
))
&&
!
(
tdentry
->
d_inode
->
i_gid
&&
(
tdentry
->
d_inode
->
i_mode
&
S_IXGRP
))
&&
!
(
tdentry
->
d_inode
->
i_mode
&
S_IXOTH
)
)
{
error
=
nfserr_stale
;
dprintk
(
"fh_verify: no root_squashed access.
\n
"
);
}
}
while
((
tdentry
!=
tdentry
->
d_parent
));
if
(
exp
->
ex_dentry
!=
tdentry
)
{
error
=
nfserr_stale
;
printk
(
"nfsd Security: %s/%s bad export.
\n
"
,
dentry
->
d_parent
->
d_name
.
name
,
dentry
->
d_name
.
name
);
spin_unlock
(
&
dcache_lock
);
goto
out
;
}
spin_unlock
(
&
dcache_lock
);
}
}
/* Finally, check access permissions. */
/* Finally, check access permissions. */
if
(
!
error
)
{
error
=
nfsd_permission
(
exp
,
dentry
,
access
);
error
=
nfsd_permission
(
exp
,
dentry
,
access
);
}
#ifdef NFSD_PARANOIA_EXTREME
#ifdef NFSD_PARANOIA_EXTREME
if
(
error
)
{
if
(
error
)
{
printk
(
"fh_verify: %s/%s permission failure, acc=%x, error=%d
\n
"
,
printk
(
"fh_verify: %s/%s permission failure, acc=%x, error=%d
\n
"
,
...
@@ -790,38 +270,14 @@ inline int _fh_update(struct dentry *dentry, struct svc_export *exp,
...
@@ -790,38 +270,14 @@ inline int _fh_update(struct dentry *dentry, struct svc_export *exp,
__u32
*
datap
,
int
*
maxsize
)
__u32
*
datap
,
int
*
maxsize
)
{
{
struct
export_operations
*
nop
=
exp
->
ex_mnt
->
mnt_sb
->
s_export_op
;
struct
export_operations
*
nop
=
exp
->
ex_mnt
->
mnt_sb
->
s_export_op
;
struct
super_block
*
sb
=
dentry
->
d_sb
;
if
(
dentry
==
exp
->
ex_dentry
)
{
if
(
dentry
==
exp
->
ex_dentry
)
{
*
maxsize
=
0
;
*
maxsize
=
0
;
return
0
;
return
0
;
}
}
if
(
nop
)
return
CALL
(
nop
,
encode_fh
)(
dentry
,
datap
,
maxsize
,
return
CALL
(
nop
,
encode_fh
)(
dentry
,
datap
,
maxsize
,
!
(
exp
->
ex_flags
&
NFSEXP_NOSUBTREECHECK
));
!
(
exp
->
ex_flags
&
NFSEXP_NOSUBTREECHECK
));
if
(
sb
->
s_op
->
dentry_to_fh
)
{
int
need_parent
=
!
S_ISDIR
(
dentry
->
d_inode
->
i_mode
)
&&
!
(
exp
->
ex_flags
&
NFSEXP_NOSUBTREECHECK
);
int
type
=
sb
->
s_op
->
dentry_to_fh
(
dentry
,
datap
,
maxsize
,
need_parent
);
return
type
;
}
if
(
*
maxsize
<
2
)
return
255
;
*
datap
++
=
ino_t_to_u32
(
dentry
->
d_inode
->
i_ino
);
*
datap
++
=
dentry
->
d_inode
->
i_generation
;
if
(
*
maxsize
==
2
||
S_ISDIR
(
dentry
->
d_inode
->
i_mode
)
||
(
exp
->
ex_flags
&
NFSEXP_NOSUBTREECHECK
))
{
*
maxsize
=
2
;
return
1
;
}
*
datap
++
=
ino_t_to_u32
(
parent_ino
(
dentry
));
*
maxsize
=
3
;
return
2
;
}
}
/*
/*
...
@@ -845,7 +301,6 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
...
@@ -845,7 +301,6 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
* of the same version, where possible.
* of the same version, where possible.
* Currently, that means that if ref_fh->fh_handle.fh_version == 0xca
* Currently, that means that if ref_fh->fh_handle.fh_version == 0xca
* Then create a 32byte filehandle using nfs_fhbase_old
* Then create a 32byte filehandle using nfs_fhbase_old
* But only do this if dentry_to_fh is not available
*
*
*/
*/
...
@@ -870,8 +325,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
...
@@ -870,8 +325,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, st
fhp
->
fh_export
=
exp
;
fhp
->
fh_export
=
exp
;
if
(
ref_fh
&&
if
(
ref_fh
&&
ref_fh
->
fh_handle
.
fh_version
==
0xca
&&
ref_fh
->
fh_handle
.
fh_version
==
0xca
)
{
dentry
->
d_sb
->
s_op
->
dentry_to_fh
==
NULL
)
{
/* old style filehandle please */
/* old style filehandle please */
memset
(
&
fhp
->
fh_handle
.
fh_base
,
0
,
NFS_FHSIZE
);
memset
(
&
fhp
->
fh_handle
.
fh_base
,
0
,
NFS_FHSIZE
);
fhp
->
fh_handle
.
fh_size
=
NFS_FHSIZE
;
fhp
->
fh_handle
.
fh_size
=
NFS_FHSIZE
;
...
...
fs/nls/Makefile
View file @
b446946d
...
@@ -2,6 +2,9 @@
...
@@ -2,6 +2,9 @@
# Makefile for native language support
# Makefile for native language support
#
#
O_TARGET
=
nls.o
export-objs
:=
nls_base.o
obj-y
:=
nls_base.o
obj-y
:=
nls_base.o
obj-m
:=
obj-m
:=
obj-n
:=
obj-n
:=
...
@@ -53,8 +56,4 @@ obj-$(CONFIG_NLS_KOI8_U) += nls_koi8-u.o nls_koi8-ru.o
...
@@ -53,8 +56,4 @@ obj-$(CONFIG_NLS_KOI8_U) += nls_koi8-u.o nls_koi8-ru.o
obj-$(CONFIG_NLS_ABC)
+=
nls_abc.o
obj-$(CONFIG_NLS_ABC)
+=
nls_abc.o
obj-$(CONFIG_NLS_UTF8)
+=
nls_utf8.o
obj-$(CONFIG_NLS_UTF8)
+=
nls_utf8.o
export-objs
=
$
(
obj-y
)
O_TARGET
=
nls.o
include
$(TOPDIR)/Rules.make
include
$(TOPDIR)/Rules.make
fs/ntfs/super.c
View file @
b446946d
...
@@ -1441,14 +1441,7 @@ struct super_operations ntfs_sops = {
...
@@ -1441,14 +1441,7 @@ struct super_operations ntfs_sops = {
clear_inode:
ntfs_clear_big_inode
,
/* VFS: Called when an inode is
clear_inode:
ntfs_clear_big_inode
,
/* VFS: Called when an inode is
removed from memory. */
removed from memory. */
umount_begin:
NULL
,
/* Forced umount. */
umount_begin:
NULL
,
/* Forced umount. */
/*
* These are NFSd support functions but NTFS is a standard fs so
* shouldn't need to implement these manually. At least we can try
* without and if it doesn't work in some way we can always implement
* something here.
*/
fh_to_dentry:
NULL
,
/* Get dentry for given file handle. */
dentry_to_fh:
NULL
,
/* Get file handle for given dentry. */
show_options:
ntfs_show_options
,
/* Show mount options in proc. */
show_options:
ntfs_show_options
,
/* Show mount options in proc. */
};
};
...
...
fs/super.c
View file @
b446946d
...
@@ -58,7 +58,6 @@ static struct super_block *alloc_super(void)
...
@@ -58,7 +58,6 @@ static struct super_block *alloc_super(void)
s
->
s_count
=
S_BIAS
;
s
->
s_count
=
S_BIAS
;
atomic_set
(
&
s
->
s_active
,
1
);
atomic_set
(
&
s
->
s_active
,
1
);
sema_init
(
&
s
->
s_vfs_rename_sem
,
1
);
sema_init
(
&
s
->
s_vfs_rename_sem
,
1
);
sema_init
(
&
s
->
s_nfsd_free_path_sem
,
1
);
sema_init
(
&
s
->
s_dquot
.
dqio_sem
,
1
);
sema_init
(
&
s
->
s_dquot
.
dqio_sem
,
1
);
sema_init
(
&
s
->
s_dquot
.
dqoff_sem
,
1
);
sema_init
(
&
s
->
s_dquot
.
dqoff_sem
,
1
);
s
->
s_maxbytes
=
MAX_NON_LFS
;
s
->
s_maxbytes
=
MAX_NON_LFS
;
...
...
include/asm-sparc64/bitops.h
View file @
b446946d
...
@@ -10,9 +10,9 @@
...
@@ -10,9 +10,9 @@
#include <linux/compiler.h>
#include <linux/compiler.h>
#include <asm/byteorder.h>
#include <asm/byteorder.h>
extern
long
___test_and_set_bit
(
unsigned
long
nr
,
volatile
void
*
addr
);
extern
long
___test_and_set_bit
(
unsigned
long
nr
,
volatile
unsigned
long
*
addr
);
extern
long
___test_and_clear_bit
(
unsigned
long
nr
,
volatile
void
*
addr
);
extern
long
___test_and_clear_bit
(
unsigned
long
nr
,
volatile
unsigned
long
*
addr
);
extern
long
___test_and_change_bit
(
unsigned
long
nr
,
volatile
void
*
addr
);
extern
long
___test_and_change_bit
(
unsigned
long
nr
,
volatile
unsigned
long
*
addr
);
#define test_and_set_bit(nr,addr) ({___test_and_set_bit(nr,addr)!=0;})
#define test_and_set_bit(nr,addr) ({___test_and_set_bit(nr,addr)!=0;})
#define test_and_clear_bit(nr,addr) ({___test_and_clear_bit(nr,addr)!=0;})
#define test_and_clear_bit(nr,addr) ({___test_and_clear_bit(nr,addr)!=0;})
...
@@ -22,52 +22,64 @@ extern long ___test_and_change_bit(unsigned long nr, volatile void *addr);
...
@@ -22,52 +22,64 @@ extern long ___test_and_change_bit(unsigned long nr, volatile void *addr);
#define change_bit(nr,addr) ((void)___test_and_change_bit(nr,addr))
#define change_bit(nr,addr) ((void)___test_and_change_bit(nr,addr))
/* "non-atomic" versions... */
/* "non-atomic" versions... */
#define __set_bit(X,Y) \
do { unsigned long __nr = (X); \
static
__inline__
void
__set_bit
(
int
nr
,
volatile
unsigned
long
*
addr
)
long *__m = ((long *) (Y)) + (__nr >> 6); \
{
*__m |= (1UL << (__nr & 63)); \
volatile
unsigned
long
*
m
=
addr
+
(
nr
>>
6
);
} while (0)
#define __clear_bit(X,Y) \
*
m
|=
(
1UL
<<
(
nr
&
63
));
do { unsigned long __nr = (X); \
}
long *__m = ((long *) (Y)) + (__nr >> 6); \
*__m &= ~(1UL << (__nr & 63)); \
static
__inline__
void
__clear_bit
(
int
nr
,
volatile
unsigned
long
*
addr
)
} while (0)
{
#define __change_bit(X,Y) \
volatile
unsigned
long
*
m
=
addr
+
(
nr
>>
6
);
do { unsigned long __nr = (X); \
long *__m = ((long *) (Y)) + (__nr >> 6); \
*
m
&=
~
(
1UL
<<
(
nr
&
63
));
*__m ^= (1UL << (__nr & 63)); \
}
} while (0)
#define __test_and_set_bit(X,Y) \
static
__inline__
void
__change_bit
(
int
nr
,
volatile
unsigned
long
*
addr
)
({ unsigned long __nr = (X); \
{
long *__m = ((long *) (Y)) + (__nr >> 6); \
volatile
unsigned
long
*
m
=
addr
+
(
nr
>>
6
);
long __old = *__m; \
long __mask = (1UL << (__nr & 63)); \
*
m
^=
(
1UL
<<
(
nr
&
63
));
*__m = (__old | __mask); \
}
((__old & __mask) != 0); \
})
static
__inline__
int
__test_and_set_bit
(
int
nr
,
volatile
unsigned
long
*
addr
)
#define __test_and_clear_bit(X,Y) \
{
({ unsigned long __nr = (X); \
volatile
unsigned
long
*
m
=
addr
+
(
nr
>>
6
);
long *__m = ((long *) (Y)) + (__nr >> 6); \
long
old
=
*
m
;
long __old = *__m; \
long
mask
=
(
1UL
<<
(
nr
&
63
));
long __mask = (1UL << (__nr & 63)); \
*__m = (__old & ~__mask); \
*
m
=
(
old
|
mask
);
((__old & __mask) != 0); \
return
((
old
&
mask
)
!=
0
);
})
}
#define __test_and_change_bit(X,Y) \
({ unsigned long __nr = (X); \
static
__inline__
int
__test_and_clear_bit
(
int
nr
,
volatile
unsigned
long
*
addr
)
long *__m = ((long *) (Y)) + (__nr >> 6); \
{
long __old = *__m; \
volatile
unsigned
long
*
m
=
addr
+
(
nr
>>
6
);
long __mask = (1UL << (__nr & 63)); \
long
old
=
*
m
;
*__m = (__old ^ __mask); \
long
mask
=
(
1UL
<<
(
nr
&
63
));
((__old & __mask) != 0); \
})
*
m
=
(
old
&
~
mask
);
return
((
old
&
mask
)
!=
0
);
}
static
__inline__
int
__test_and_change_bit
(
int
nr
,
volatile
unsigned
long
*
addr
)
{
volatile
unsigned
long
*
m
=
addr
+
(
nr
>>
6
);
long
old
=
*
m
;
long
mask
=
(
1UL
<<
(
nr
&
63
));
*
m
=
(
old
^
mask
);
return
((
old
&
mask
)
!=
0
);
}
#define smp_mb__before_clear_bit() do { } while(0)
#define smp_mb__before_clear_bit() do { } while(0)
#define smp_mb__after_clear_bit() do { } while(0)
#define smp_mb__after_clear_bit() do { } while(0)
static
__inline__
int
test_bit
(
int
nr
,
__const__
vo
id
*
addr
)
static
__inline__
int
test_bit
(
int
nr
,
__const__
vo
latile
unsigned
long
*
addr
)
{
{
return
(
1UL
&
((
(
__const__
long
*
)
addr
)[
nr
>>
6
]
>>
(
nr
&
63
)))
!=
0UL
;
return
(
1UL
&
((
addr
)[
nr
>>
6
]
>>
(
nr
&
63
)))
!=
0UL
;
}
}
/* The easy/cheese version for now. */
/* The easy/cheese version for now. */
...
@@ -177,9 +189,9 @@ static __inline__ unsigned int hweight8(unsigned int w)
...
@@ -177,9 +189,9 @@ static __inline__ unsigned int hweight8(unsigned int w)
* @offset: The bitnumber to start searching at
* @offset: The bitnumber to start searching at
* @size: The maximum size to search
* @size: The maximum size to search
*/
*/
static
__inline__
unsigned
long
find_next_bit
(
void
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
static
__inline__
unsigned
long
find_next_bit
(
unsigned
long
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
{
{
unsigned
long
*
p
=
((
unsigned
long
*
)
addr
)
+
(
offset
>>
6
);
unsigned
long
*
p
=
addr
+
(
offset
>>
6
);
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
tmp
;
unsigned
long
tmp
;
...
@@ -231,9 +243,9 @@ static __inline__ unsigned long find_next_bit(void *addr, unsigned long size, un
...
@@ -231,9 +243,9 @@ static __inline__ unsigned long find_next_bit(void *addr, unsigned long size, un
* on Linus's ALPHA routines, which are pretty portable BTW.
* on Linus's ALPHA routines, which are pretty portable BTW.
*/
*/
static
__inline__
unsigned
long
find_next_zero_bit
(
void
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
static
__inline__
unsigned
long
find_next_zero_bit
(
unsigned
long
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
{
{
unsigned
long
*
p
=
((
unsigned
long
*
)
addr
)
+
(
offset
>>
6
);
unsigned
long
*
p
=
addr
+
(
offset
>>
6
);
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
tmp
;
unsigned
long
tmp
;
...
@@ -272,15 +284,15 @@ static __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long siz
...
@@ -272,15 +284,15 @@ static __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long siz
#define find_first_zero_bit(addr, size) \
#define find_first_zero_bit(addr, size) \
find_next_zero_bit((addr), (size), 0)
find_next_zero_bit((addr), (size), 0)
extern
long
___test_and_set_le_bit
(
int
nr
,
volatile
void
*
addr
);
extern
long
___test_and_set_le_bit
(
int
nr
,
volatile
unsigned
long
*
addr
);
extern
long
___test_and_clear_le_bit
(
int
nr
,
volatile
void
*
addr
);
extern
long
___test_and_clear_le_bit
(
int
nr
,
volatile
unsigned
long
*
addr
);
#define test_and_set_le_bit(nr,addr) ({___test_and_set_le_bit(nr,addr)!=0;})
#define test_and_set_le_bit(nr,addr) ({___test_and_set_le_bit(nr,addr)!=0;})
#define test_and_clear_le_bit(nr,addr) ({___test_and_clear_le_bit(nr,addr)!=0;})
#define test_and_clear_le_bit(nr,addr) ({___test_and_clear_le_bit(nr,addr)!=0;})
#define set_le_bit(nr,addr) ((void)___test_and_set_le_bit(nr,addr))
#define set_le_bit(nr,addr) ((void)___test_and_set_le_bit(nr,addr))
#define clear_le_bit(nr,addr) ((void)___test_and_clear_le_bit(nr,addr))
#define clear_le_bit(nr,addr) ((void)___test_and_clear_le_bit(nr,addr))
static
__inline__
int
test_le_bit
(
int
nr
,
__const__
void
*
addr
)
static
__inline__
int
test_le_bit
(
int
nr
,
__const__
unsigned
long
*
addr
)
{
{
int
mask
;
int
mask
;
__const__
unsigned
char
*
ADDR
=
(
__const__
unsigned
char
*
)
addr
;
__const__
unsigned
char
*
ADDR
=
(
__const__
unsigned
char
*
)
addr
;
...
@@ -293,9 +305,9 @@ static __inline__ int test_le_bit(int nr, __const__ void * addr)
...
@@ -293,9 +305,9 @@ static __inline__ int test_le_bit(int nr, __const__ void * addr)
#define find_first_zero_le_bit(addr, size) \
#define find_first_zero_le_bit(addr, size) \
find_next_zero_le_bit((addr), (size), 0)
find_next_zero_le_bit((addr), (size), 0)
static
__inline__
unsigned
long
find_next_zero_le_bit
(
void
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
static
__inline__
unsigned
long
find_next_zero_le_bit
(
unsigned
long
*
addr
,
unsigned
long
size
,
unsigned
long
offset
)
{
{
unsigned
long
*
p
=
((
unsigned
long
*
)
addr
)
+
(
offset
>>
6
);
unsigned
long
*
p
=
addr
+
(
offset
>>
6
);
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
result
=
offset
&
~
63UL
;
unsigned
long
tmp
;
unsigned
long
tmp
;
...
@@ -332,18 +344,22 @@ static __inline__ unsigned long find_next_zero_le_bit(void *addr, unsigned long
...
@@ -332,18 +344,22 @@ static __inline__ unsigned long find_next_zero_le_bit(void *addr, unsigned long
#ifdef __KERNEL__
#ifdef __KERNEL__
#define ext2_set_bit test_and_set_le_bit
#define ext2_set_bit(nr,addr) test_and_set_le_bit((nr),(unsigned long *)(addr))
#define ext2_clear_bit test_and_clear_le_bit
#define ext2_clear_bit(nr,addr) test_and_clear_le_bit((nr),(unsigned long *)(addr))
#define ext2_test_bit test_le_bit
#define ext2_test_bit(nr,addr) test_le_bit((nr),(unsigned long *)(addr))
#define ext2_find_first_zero_bit find_first_zero_le_bit
#define ext2_find_first_zero_bit(addr, size) \
#define ext2_find_next_zero_bit find_next_zero_le_bit
find_first_zero_le_bit((unsigned long *)(addr), (size))
#define ext2_find_next_zero_bit(addr, size, off) \
find_next_zero_le_bit((unsigned long *)(addr), (size), (off))
/* Bitmap functions for the minix filesystem. */
/* Bitmap functions for the minix filesystem. */
#define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr)
#define minix_test_and_set_bit(nr,addr) test_and_set_bit((nr),(unsigned long *)(addr))
#define minix_set_bit(nr,addr) set_bit(nr,addr)
#define minix_set_bit(nr,addr) set_bit((nr),(unsigned long *)(addr))
#define minix_test_and_clear_bit(nr,addr) test_and_clear_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr) \
#define minix_test_bit(nr,addr) test_bit(nr,addr)
test_and_clear_bit((nr),(unsigned long *)(addr))
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
#define minix_test_bit(nr,addr) test_bit((nr),(unsigned long *)(addr))
#define minix_find_first_zero_bit(addr,size) \
find_first_zero_bit((unsigned long *)(addr),(size))
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
...
...
include/asm-sparc64/visasm.h
View file @
b446946d
...
@@ -10,8 +10,6 @@
...
@@ -10,8 +10,6 @@
#include <asm/pstate.h>
#include <asm/pstate.h>
#include <asm/ptrace.h>
#include <asm/ptrace.h>
#define AOFF_task_fpregs (((ASIZ_task) + (64 - 1)) & ~(64 - 1))
/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc */
/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc */
#define VISEntry \
#define VISEntry \
...
...
include/linux/fs.h
View file @
b446946d
...
@@ -660,15 +660,6 @@ struct super_block {
...
@@ -660,15 +660,6 @@ struct super_block {
* even looking at it. You had been warned.
* even looking at it. You had been warned.
*/
*/
struct
semaphore
s_vfs_rename_sem
;
/* Kludge */
struct
semaphore
s_vfs_rename_sem
;
/* Kludge */
/* The next field is used by knfsd when converting a (inode number based)
* file handle into a dentry. As it builds a path in the dcache tree from
* the bottom up, there may for a time be a subpath of dentrys which is not
* connected to the main tree. This semaphore ensure that there is only ever
* one such free path per filesystem. Note that unconnected files (or other
* non-directories) are allowed, but not unconnected diretories.
*/
struct
semaphore
s_nfsd_free_path_sem
;
};
};
/*
/*
...
@@ -798,30 +789,6 @@ struct super_operations {
...
@@ -798,30 +789,6 @@ struct super_operations {
void
(
*
clear_inode
)
(
struct
inode
*
);
void
(
*
clear_inode
)
(
struct
inode
*
);
void
(
*
umount_begin
)
(
struct
super_block
*
);
void
(
*
umount_begin
)
(
struct
super_block
*
);
/* Following are for knfsd to interact with "interesting" filesystems
* Currently just reiserfs, but possibly FAT and others later
*
* fh_to_dentry is given a filehandle fragement with length, and a type flag
* and must return a dentry for the referenced object or, if "parent" is
* set, a dentry for the parent of the object.
* If a dentry cannot be found, a "root" dentry should be created and
* flaged as DCACHE_DISCONNECTED. nfsd_iget is an example implementation.
*
* dentry_to_fh is given a dentry and must generate the filesys specific
* part of the file handle. Available length is passed in *lenp and used
* length should be returned therein.
* If need_parent is set, then dentry_to_fh should encode sufficient information
* to find the (current) parent.
* dentry_to_fh should return a 1byte "type" which will be passed back in
* the fhtype arguement to fh_to_dentry. Type of 0 is reserved.
* If filesystem was exportable before the introduction of fh_to_dentry,
* types 1 and 2 should be used is that same way as the generic code.
* Type 255 means error.
*
* Lengths are in units of 4bytes, not bytes.
*/
struct
dentry
*
(
*
fh_to_dentry
)(
struct
super_block
*
sb
,
__u32
*
fh
,
int
len
,
int
fhtype
,
int
parent
);
int
(
*
dentry_to_fh
)(
struct
dentry
*
,
__u32
*
fh
,
int
*
lenp
,
int
need_parent
);
int
(
*
show_options
)(
struct
seq_file
*
,
struct
vfsmount
*
);
int
(
*
show_options
)(
struct
seq_file
*
,
struct
vfsmount
*
);
};
};
...
...
include/linux/sched.h
View file @
b446946d
...
@@ -459,6 +459,11 @@ extern void free_uid(struct user_struct *);
...
@@ -459,6 +459,11 @@ extern void free_uid(struct user_struct *);
#include <asm/current.h>
#include <asm/current.h>
/*
* The 64-bit value is not volatile - you MUST NOT read it
* without holding read_lock_irq(&xtime_lock)
*/
extern
u64
jiffies_64
;
extern
unsigned
long
volatile
jiffies
;
extern
unsigned
long
volatile
jiffies
;
extern
unsigned
long
itimer_ticks
;
extern
unsigned
long
itimer_ticks
;
extern
unsigned
long
itimer_next
;
extern
unsigned
long
itimer_next
;
...
...
include/math-emu/op-common.h
View file @
b446946d
...
@@ -765,23 +765,25 @@ do { \
...
@@ -765,23 +765,25 @@ do { \
do { \
do { \
if (r) \
if (r) \
{ \
{ \
unsigned rtype ur_; \
X##_c = FP_CLS_NORMAL; \
X##_c = FP_CLS_NORMAL; \
\
\
if ((X##_s = (r < 0))) \
if ((X##_s = (r < 0))) \
r = -r; \
r = -r; \
\
\
ur_ = (unsigned rtype) r; \
if (rsize <= _FP_W_TYPE_SIZE) \
if (rsize <= _FP_W_TYPE_SIZE) \
__FP_CLZ(X##_e,
r
); \
__FP_CLZ(X##_e,
ur_
); \
else \
else \
__FP_CLZ_2(X##_e, (_FP_W_TYPE)(
r
>> _FP_W_TYPE_SIZE), \
__FP_CLZ_2(X##_e, (_FP_W_TYPE)(
ur_
>> _FP_W_TYPE_SIZE), \
(_FP_W_TYPE)
r
); \
(_FP_W_TYPE)
ur_
); \
if (rsize < _FP_W_TYPE_SIZE) \
if (rsize < _FP_W_TYPE_SIZE) \
X##_e -= (_FP_W_TYPE_SIZE - rsize); \
X##_e -= (_FP_W_TYPE_SIZE - rsize); \
X##_e = rsize - X##_e - 1; \
X##_e = rsize - X##_e - 1; \
\
\
if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs < X##_e) \
if (_FP_FRACBITS_##fs < rsize && _FP_WFRACBITS_##fs < X##_e) \
__FP_FRAC_SRS_1(
r, (X##_e - _FP_WFRACBITS_##fs + 1), rsize);
\
__FP_FRAC_SRS_1(
ur_, (X##_e - _FP_WFRACBITS_##fs + 1), rsize);
\
_FP_FRAC_DISASSEMBLE_##wc(X,
((unsigned rtype)r), rsize);
\
_FP_FRAC_DISASSEMBLE_##wc(X,
ur_, rsize);
\
if ((_FP_WFRACBITS_##fs - X##_e - 1) > 0) \
if ((_FP_WFRACBITS_##fs - X##_e - 1) > 0) \
_FP_FRAC_SLL_##wc(X, (_FP_WFRACBITS_##fs - X##_e - 1)); \
_FP_FRAC_SLL_##wc(X, (_FP_WFRACBITS_##fs - X##_e - 1)); \
} \
} \
...
...
kernel/ksyms.c
View file @
b446946d
...
@@ -471,6 +471,7 @@ EXPORT_SYMBOL_GPL(idle_cpu);
...
@@ -471,6 +471,7 @@ EXPORT_SYMBOL_GPL(idle_cpu);
EXPORT_SYMBOL_GPL
(
set_cpus_allowed
);
EXPORT_SYMBOL_GPL
(
set_cpus_allowed
);
#endif
#endif
EXPORT_SYMBOL
(
jiffies
);
EXPORT_SYMBOL
(
jiffies
);
EXPORT_SYMBOL
(
jiffies_64
);
EXPORT_SYMBOL
(
xtime
);
EXPORT_SYMBOL
(
xtime
);
EXPORT_SYMBOL
(
do_gettimeofday
);
EXPORT_SYMBOL
(
do_gettimeofday
);
EXPORT_SYMBOL
(
do_settimeofday
);
EXPORT_SYMBOL
(
do_settimeofday
);
...
...
kernel/timer.c
View file @
b446946d
...
@@ -67,7 +67,12 @@ unsigned long event;
...
@@ -67,7 +67,12 @@ unsigned long event;
extern
int
do_setitimer
(
int
,
struct
itimerval
*
,
struct
itimerval
*
);
extern
int
do_setitimer
(
int
,
struct
itimerval
*
,
struct
itimerval
*
);
unsigned
long
volatile
jiffies
;
/*
* The 64-bit value is not volatile - you MUST NOT read it
* without holding read_lock_irq(&xtime_lock).
* jiffies is defined in the linker script...
*/
u64
jiffies_64
;
unsigned
int
*
prof_buffer
;
unsigned
int
*
prof_buffer
;
unsigned
long
prof_len
;
unsigned
long
prof_len
;
...
@@ -664,7 +669,7 @@ void timer_bh(void)
...
@@ -664,7 +669,7 @@ void timer_bh(void)
void
do_timer
(
struct
pt_regs
*
regs
)
void
do_timer
(
struct
pt_regs
*
regs
)
{
{
(
*
(
unsigned
long
*
)
&
jiffies
)
++
;
jiffies_64
++
;
#ifndef CONFIG_SMP
#ifndef CONFIG_SMP
/* SMP process accounting uses the local APIC timer */
/* SMP process accounting uses the local APIC timer */
...
...
net/ipv4/syncookies.c
View file @
b446946d
...
@@ -14,8 +14,6 @@
...
@@ -14,8 +14,6 @@
* Missing: IPv6 support.
* Missing: IPv6 support.
*/
*/
#include <linux/config.h>
#if defined(CONFIG_SYN_COOKIES)
#include <linux/tcp.h>
#include <linux/tcp.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/random.h>
...
@@ -194,4 +192,3 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
...
@@ -194,4 +192,3 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
ret
=
get_cookie_sock
(
sk
,
skb
,
req
,
&
rt
->
u
.
dst
);
ret
=
get_cookie_sock
(
sk
,
skb
,
req
,
&
rt
->
u
.
dst
);
out:
return
ret
;
out:
return
ret
;
}
}
#endif
net/ipv4/tcp_ipv4.c
View file @
b446946d
...
@@ -1518,7 +1518,6 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
...
@@ -1518,7 +1518,6 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
NETDEBUG
(
if
(
net_ratelimit
())
\
NETDEBUG
(
if
(
net_ratelimit
())
\
printk
(
KERN_DEBUG
"TCP: drop open request from %u.%u.%u.%u/%u
\n
"
,
\
printk
(
KERN_DEBUG
"TCP: drop open request from %u.%u.%u.%u/%u
\n
"
,
\
NIPQUAD
(
saddr
),
ntohs
(
skb
->
h
.
th
->
source
)));
NIPQUAD
(
saddr
),
ntohs
(
skb
->
h
.
th
->
source
)));
TCP_INC_STATS_BH
(
TcpAttemptFails
);
dst_release
(
dst
);
dst_release
(
dst
);
goto
drop_and_free
;
goto
drop_and_free
;
}
}
...
...
net/sched/sch_ingress.c
View file @
b446946d
...
@@ -146,8 +146,8 @@ static int ingress_enqueue(struct sk_buff *skb,struct Qdisc *sch)
...
@@ -146,8 +146,8 @@ static int ingress_enqueue(struct sk_buff *skb,struct Qdisc *sch)
* Unlike normal "enqueue" functions, ingress_enqueue returns a
* Unlike normal "enqueue" functions, ingress_enqueue returns a
* firewall FW_* code.
* firewall FW_* code.
*/
*/
switch
(
result
)
{
#ifdef CONFIG_NET_CLS_POLICE
#ifdef CONFIG_NET_CLS_POLICE
switch
(
result
)
{
case
TC_POLICE_SHOT
:
case
TC_POLICE_SHOT
:
result
=
NF_DROP
;
result
=
NF_DROP
;
sch
->
stats
.
drops
++
;
sch
->
stats
.
drops
++
;
...
@@ -160,7 +160,7 @@ static int ingress_enqueue(struct sk_buff *skb,struct Qdisc *sch)
...
@@ -160,7 +160,7 @@ static int ingress_enqueue(struct sk_buff *skb,struct Qdisc *sch)
sch
->
stats
.
bytes
+=
skb
->
len
;
sch
->
stats
.
bytes
+=
skb
->
len
;
result
=
NF_ACCEPT
;
result
=
NF_ACCEPT
;
break
;
break
;
}
}
;
#else
#else
sch
->
stats
.
packets
++
;
sch
->
stats
.
packets
++
;
sch
->
stats
.
bytes
+=
skb
->
len
;
sch
->
stats
.
bytes
+=
skb
->
len
;
...
...
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