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
00e99d41
Commit
00e99d41
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 2.1.24
parent
32d4fbac
Changes
44
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
44 changed files
with
639 additions
and
711 deletions
+639
-711
MAINTAINERS
MAINTAINERS
+1
-1
Makefile
Makefile
+1
-1
arch/i386/boot/compressed/misc.c
arch/i386/boot/compressed/misc.c
+4
-0
arch/i386/kernel/smp.c
arch/i386/kernel/smp.c
+3
-3
drivers/block/floppy.c
drivers/block/floppy.c
+0
-1
drivers/block/triton.c
drivers/block/triton.c
+90
-33
drivers/char/rtc.c
drivers/char/rtc.c
+1
-0
drivers/char/softdog.c
drivers/char/softdog.c
+4
-1
drivers/net/ppp.c
drivers/net/ppp.c
+1
-19
drivers/sbus/char/sunkeymap.c
drivers/sbus/char/sunkeymap.c
+3
-3
drivers/sbus/char/sunkeymap.map
drivers/sbus/char/sunkeymap.map
+4
-4
drivers/scsi/AM53C974.h
drivers/scsi/AM53C974.h
+3
-3
drivers/scsi/ChangeLog
drivers/scsi/ChangeLog
+1
-1
drivers/sound/audio.c
drivers/sound/audio.c
+17
-30
drivers/sound/dmabuf.c
drivers/sound/dmabuf.c
+54
-93
drivers/sound/midibuf.c
drivers/sound/midibuf.c
+15
-33
drivers/sound/sequencer.c
drivers/sound/sequencer.c
+16
-37
drivers/sound/sound_calls.h
drivers/sound/sound_calls.h
+4
-4
drivers/sound/soundcard.c
drivers/sound/soundcard.c
+8
-8
fs/binfmt_script.c
fs/binfmt_script.c
+0
-1
fs/proc/array.c
fs/proc/array.c
+4
-0
fs/proc/root.c
fs/proc/root.c
+5
-0
include/asm-sparc/namei.h
include/asm-sparc/namei.h
+3
-7
include/linux/proc_fs.h
include/linux/proc_fs.h
+1
-0
include/linux/sched.h
include/linux/sched.h
+1
-1
include/linux/swap.h
include/linux/swap.h
+1
-0
include/net/sock.h
include/net/sock.h
+8
-0
include/net/tcp.h
include/net/tcp.h
+1
-2
kernel/sched.c
kernel/sched.c
+146
-45
mm/swapfile.c
mm/swapfile.c
+42
-0
net/appletalk/ddp.c
net/appletalk/ddp.c
+8
-17
net/ax25/af_ax25.c
net/ax25/af_ax25.c
+16
-33
net/ax25/ax25_subr.c
net/ax25/ax25_subr.c
+2
-4
net/ax25/ax25_timer.c
net/ax25/ax25_timer.c
+2
-4
net/ipv4/tcp.c
net/ipv4/tcp.c
+22
-33
net/ipv4/tcp_input.c
net/ipv4/tcp_input.c
+96
-132
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_ipv4.c
+5
-23
net/ipv4/tcp_output.c
net/ipv4/tcp_output.c
+10
-22
net/ipv6/tcp_ipv6.c
net/ipv6/tcp_ipv6.c
+1
-4
net/ipx/af_ipx.c
net/ipx/af_ipx.c
+4
-11
net/netbeui/netbeui.c
net/netbeui/netbeui.c
+8
-27
net/netrom/af_netrom.c
net/netrom/af_netrom.c
+8
-24
net/rose/af_rose.c
net/rose/af_rose.c
+8
-24
net/x25/af_x25.c
net/x25/af_x25.c
+7
-22
No files found.
MAINTAINERS
View file @
00e99d41
...
...
@@ -261,7 +261,7 @@ S: Maintained
PPP PROTOCOL DRIVERS AND COMPRESSORS
P: Al Longyear
M: longyear@
netcom.com, Cc: longyear@sii
.com
M: longyear@
pobox
.com
L: linux-ppp@vger.rutgers.edu
S: Maintained
...
...
Makefile
View file @
00e99d41
VERSION
=
2
PATCHLEVEL
=
1
SUBLEVEL
=
2
3
SUBLEVEL
=
2
4
ARCH
=
i386
...
...
arch/i386/boot/compressed/misc.c
View file @
00e99d41
...
...
@@ -356,7 +356,11 @@ struct moveparams {
void
setup_output_buffer_if_we_run_high
(
struct
moveparams
*
mv
)
{
high_buffer_start
=
(
uch
*
)(((
ulg
)
&
end
)
+
HEAP_SIZE
);
#ifdef STANDARD_MEMORY_BIOS_CALL
if
(
EXT_MEM_K
<
(
3
*
1024
))
error
(
"Less than 4MB of memory.
\n
"
);
#else
if
(
EXT_MEM_K
*
64
<
(
3
*
1024
))
error
(
"Less than 4MB of memory.
\n
"
);
#endif
mv
->
low_buffer_start
=
output_data
=
(
char
*
)
LOW_BUFFER_START
;
high_loaded
=
1
;
free_mem_end_ptr
=
(
long
)
high_buffer_start
;
...
...
arch/i386/kernel/smp.c
View file @
00e99d41
...
...
@@ -638,11 +638,11 @@ void smp_callin(void)
load_ldt
(
0
);
local_flush_tlb
();
while
(
!
task
[
cpuid
]
||
current_set
[
cpuid
]
!=
task
[
cpuid
]
)
while
(
cpu_number_map
[
cpuid
]
==
-
1
)
barrier
();
if
(
cpu_number_map
[
cpuid
]
==
-
1
)
while
(
1
);
while
(
!
task
[
cpuid
]
||
current_set
[
cpuid
]
!=
task
[
cpu_number_map
[
cpuid
]]
)
barrier
(
);
local_flush_tlb
();
load_TR
(
cpu_number_map
[
cpuid
]);
...
...
drivers/block/floppy.c
View file @
00e99d41
...
...
@@ -4128,7 +4128,6 @@ static void floppy_release_irq_and_dma(void)
extern
char
*
get_options
(
char
*
str
,
int
*
ints
);
char
*
floppy
=
NULL
;
MODULE_PARM
(
floppy
,
"s"
);
static
void
parse_floppy_cfg_string
(
char
*
cfg
)
{
...
...
drivers/block/triton.c
View file @
00e99d41
/*
* linux/drivers/block/triton.c Version 1.
13 Aug 12, 1996
* linux/drivers/block/triton.c Version 1.
20 Jan 27, 1997
*
* Copyright (c) 1995-199
6
Mark Lord
* Copyright (c) 1995-199
7
Mark Lord
* May be copied or modified under the terms of the GNU General Public License
*/
...
...
@@ -95,6 +95,9 @@
* available from ftp://ftp.intel.com/pub/bios/10004bs0.exe
* (thanks to Glen Morrell <glen@spin.Stanford.edu> for researching this).
*
* Thanks to "Christopher J. Reimer" <reimer@doe.carleton.ca> for fixing the
* problem with some (all?) ACER motherboards/BIOSs.
*
* And, yes, Intel Zappa boards really *do* use the Triton IDE ports.
*/
#include <linux/types.h>
...
...
@@ -143,7 +146,11 @@ const char *good_dma_drives[] = {"Micropolis 2112A",
*/
#define PRD_BYTES 8
#define PRD_ENTRIES (PAGE_SIZE / (2 * PRD_BYTES))
#define DEFAULT_BMIBA 0xe800
/* in case BIOS did not init it */
/*
* Interface to access piix registers
*/
static
unsigned
int
piix_key
;
/*
* dma_intr() is the handler for disk read/write DMA interrupts
...
...
@@ -366,6 +373,53 @@ static void init_triton_dma (ide_hwif_t *hwif, unsigned short base)
printk
(
"
\n
"
);
}
/* The next two functions were stolen from cmd640.c, with
a few modifications */
static
void
put_piix_reg
(
unsigned
short
reg
,
long
val
)
{
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
outl_p
((
reg
&
0xfc
)
|
piix_key
,
0xcf8
);
outl_p
(
val
,
(
reg
&
3
)
|
0xcfc
);
restore_flags
(
flags
);
}
static
long
get_piix_reg
(
unsigned
short
reg
)
{
long
b
;
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
outl_p
((
reg
&
0xfc
)
|
piix_key
,
0xcf8
);
b
=
inl_p
((
reg
&
3
)
|
0xcfc
);
restore_flags
(
flags
);
return
b
;
}
/*
* Search for an (apparently) unused block of I/O space
* of "size" bytes in length.
*/
static
short
find_free_region
(
unsigned
short
size
)
{
unsigned
short
i
,
base
=
0xe800
;
for
(
base
=
0xe800
;
base
>
0
;
base
-=
0x800
)
{
if
(
!
check_region
(
base
,
size
))
{
for
(
i
=
0
;
i
<
size
;
i
++
)
{
if
(
inb
(
base
+
i
)
!=
0xff
)
goto
next
;
}
return
base
;
/* success */
}
next:
}
return
0
;
/* failure */
}
/*
* ide_init_triton() prepares the IDE driver for DMA operation.
* This routine is called once, from ide.c during driver initialization,
...
...
@@ -379,8 +433,9 @@ void ide_init_triton (byte bus, byte fn)
unsigned
int
bmiba
,
timings
;
printk
(
"ide: i82371 PIIX (Triton) on PCI bus %d function %d
\n
"
,
bus
,
fn
);
/*
* See if IDE
and BM-DMA features are enabled:
* See if IDE
ports are enabled
*/
if
((
rc
=
pcibios_read_config_word
(
bus
,
fn
,
0x04
,
&
pcicmd
)))
goto
quit
;
...
...
@@ -388,42 +443,44 @@ void ide_init_triton (byte bus, byte fn)
printk
(
"ide: ports are not enabled (BIOS)
\n
"
);
goto
quit
;
}
if
((
rc
=
pcibios_read_config_dword
(
bus
,
fn
,
0x40
,
&
timings
)))
goto
quit
;
if
(
!
(
timings
&
0x80008000
))
{
printk
(
"ide: neither port is enabled
\n
"
);
goto
quit
;
}
/*
* See if Bus-Mastered DMA is enabled
*/
if
((
pcicmd
&
4
)
==
0
)
{
printk
(
"ide: BM-DMA feature is not enabled (BIOS)
\n
"
);
}
else
{
/*
* Get the bmiba base address
*/
int
try_again
=
1
;
do
{
if
((
rc
=
pcibios_read_config_dword
(
bus
,
fn
,
0x20
,
&
bmiba
)))
goto
quit
;
bmiba
&=
0xfff0
;
/* extract port base address */
if
(
bmiba
)
{
dma_enabled
=
1
;
break
;
}
else
{
printk
(
"ide: BM-DMA base register is invalid (0x%04x, PnP BIOS problem)
\n
"
,
bmiba
);
if
(
inb
(
DEFAULT_BMIBA
)
!=
0xff
||
!
try_again
)
break
;
printk
(
"ide: setting BM-DMA base register to 0x%04x
\n
"
,
DEFAULT_BMIBA
);
if
((
rc
=
pcibios_write_config_word
(
bus
,
fn
,
0x04
,
pcicmd
&~
1
)))
goto
quit
;
rc
=
pcibios_write_config_dword
(
bus
,
fn
,
0x20
,
DEFAULT_BMIBA
|
1
);
if
(
pcibios_write_config_word
(
bus
,
fn
,
0x04
,
pcicmd
|
5
)
||
rc
)
goto
quit
;
if
((
rc
=
pcibios_read_config_dword
(
bus
,
fn
,
0x20
,
&
bmiba
)))
goto
quit
;
bmiba
&=
0xfff0
;
/* extract port base address */
if
(
bmiba
)
{
dma_enabled
=
1
;
}
else
{
unsigned
short
base
;
printk
(
"ide: BM-DMA base register is invalid (0x%04x, PnP BIOS problem)
\n
"
,
bmiba
);
base
=
find_free_region
(
16
);
if
(
base
)
{
printk
(
"ide: bypassing BIOS; setting BMIBA to 0x%04x
\n
"
,
base
);
piix_key
=
0x80000000
+
(
fn
*
0x100
);
put_piix_reg
(
0x04
,
get_piix_reg
(
0x04
)
&~
5
);
put_piix_reg
(
0x20
,(
get_piix_reg
(
0x20
)
&
0xFFFF000F
)
|
base
|
1
);
put_piix_reg
(
0x04
,
get_piix_reg
(
0x04
)
|
5
);
bmiba
=
get_piix_reg
(
0x20
)
&
0x0000FFF0
;
if
(
bmiba
==
base
&&
(
get_piix_reg
(
0x04
)
&
5
)
==
5
)
dma_enabled
=
1
;
else
printk
(
"ide: no such luck; DMA disabled
\n
"
);
}
}
while
(
try_again
--
);
}
/*
* See if ide port(s) are enabled
*/
if
((
rc
=
pcibios_read_config_dword
(
bus
,
fn
,
0x40
,
&
timings
)))
goto
quit
;
if
(
!
(
timings
&
0x80008000
))
{
printk
(
"ide: neither port is enabled
\n
"
);
goto
quit
;
}
}
/*
...
...
drivers/char/rtc.c
View file @
00e99d41
...
...
@@ -54,6 +54,7 @@
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/poll.h>
/*
* We sponge a minor off of the misc major. No need slurping
...
...
drivers/char/softdog.c
View file @
00e99d41
...
...
@@ -46,6 +46,7 @@ static int soft_margin = TIMER_MARGIN; /* in seconds */
struct
timer_list
watchdog_ticktock
;
static
int
timer_alive
=
0
;
static
int
in_use
=
0
;
/*
...
...
@@ -70,8 +71,9 @@ static void watchdog_fire(unsigned long data)
static
int
softdog_open
(
struct
inode
*
inode
,
struct
file
*
file
)
{
if
(
timer_aliv
e
)
if
(
in_us
e
)
return
-
EBUSY
;
in_use
=
1
;
MOD_INC_USE_COUNT
;
/*
* Activate timer
...
...
@@ -94,6 +96,7 @@ static void softdog_release(struct inode *inode, struct file *file)
MOD_DEC_USE_COUNT
;
timer_alive
=
0
;
#endif
in_use
=
0
;
}
static
void
softdog_ping
(
void
)
...
...
drivers/net/ppp.c
View file @
00e99d41
...
...
@@ -6,7 +6,7 @@
* Dynamic PPP devices by Jim Freeman <jfree@caldera.com>.
* ppp_tty_receive ``noisy-raise-bug'' fixed by Ove Ewerlid <ewerlid@syscon.uu.se>
*
* ==FILEVERSION 9
60528
==
* ==FILEVERSION 9
70126
==
*
* NOTE TO MAINTAINERS:
* If you modify this file at all, please set the number above to the
...
...
@@ -138,7 +138,6 @@ extern inline int lock_buffer (register struct ppp_buffer *buf);
static
int
rcv_proto_ip
(
struct
ppp
*
,
__u16
,
__u8
*
,
int
);
static
int
rcv_proto_ipx
(
struct
ppp
*
,
__u16
,
__u8
*
,
int
);
static
int
rcv_proto_ipv6
(
struct
ppp
*
,
__u16
,
__u8
*
,
int
);
static
int
rcv_proto_vjc_comp
(
struct
ppp
*
,
__u16
,
__u8
*
,
int
);
static
int
rcv_proto_vjc_uncomp
(
struct
ppp
*
,
__u16
,
__u8
*
,
int
);
static
int
rcv_proto_unknown
(
struct
ppp
*
,
__u16
,
__u8
*
,
int
);
...
...
@@ -266,7 +265,6 @@ static
ppp_proto_type
proto_list
[]
=
{
{
PPP_IP
,
rcv_proto_ip
},
{
PPP_IPX
,
rcv_proto_ipx
},
{
PPP_IPV6
,
rcv_proto_ipv6
},
{
PPP_VJC_COMP
,
rcv_proto_vjc_comp
},
{
PPP_VJC_UNCOMP
,
rcv_proto_vjc_uncomp
},
{
PPP_LQR
,
rcv_proto_lqr
},
...
...
@@ -1229,18 +1227,6 @@ rcv_proto_ipx (struct ppp *ppp, __u16 proto, __u8 * data, int count)
return
0
;
}
/*
* Process the receipt of an IPV6 frame
*/
static
int
rcv_proto_ipv6
(
struct
ppp
*
ppp
,
__u16
proto
,
__u8
*
data
,
int
count
)
{
if
(((
ppp2dev
(
ppp
)
->
flags
&
IFF_UP
)
!=
0
)
&&
(
count
>
0
))
return
ppp_rcv_rx
(
ppp
,
htons
(
ETH_P_IPV6
),
data
,
count
);
return
0
;
}
/*
* Process the receipt of an VJ Compressed frame
*/
...
...
@@ -3076,10 +3062,6 @@ ppp_dev_xmit (sk_buff *skb, struct device *dev)
answer
=
ppp_dev_xmit_ip
(
dev
,
ppp
,
data
);
break
;
case
ETH_P_IPV6
:
answer
=
ppp_dev_xmit_ipx
(
dev
,
ppp
,
data
,
len
,
PPP_IPV6
);
break
;
default:
/* All others have no support at this time. */
dev_kfree_skb
(
skb
,
FREE_WRITE
);
return
0
;
...
...
drivers/sbus/char/sunkeymap.c
View file @
00e99d41
...
...
@@ -65,7 +65,7 @@ u_short altgr_map[NR_KEYS] = {
u_short
ctrl_map
[
NR_KEYS
]
=
{
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf100
,
0xf101
,
0xf109
,
0xf102
,
0xf10a
,
0xf103
,
0xf10b
,
0xf104
,
0xf701
,
0xf105
,
0xf200
,
0xf10
7
,
0xf200
,
0xf108
,
0xf703
,
0xf603
,
0xf11d
,
0xf200
,
0xf204
,
0xf10
6
,
0xf107
,
0xf108
,
0xf703
,
0xf603
,
0xf11d
,
0xf200
,
0xf204
,
0xf601
,
0xf200
,
0xf200
,
0xf600
,
0xf602
,
0xf200
,
0xf200
,
0xf000
,
0xf01b
,
0xf01c
,
0xf01d
,
0xf01e
,
0xf01f
,
0xf07f
,
0xf200
,
0xf200
,
0xf01f
,
0xf200
,
0xf000
,
0xf008
,
0xf115
,
0xf200
,
0xf30d
,
0xf30c
,
...
...
@@ -103,7 +103,7 @@ u_short shift_ctrl_map[NR_KEYS] = {
u_short
alt_map
[
NR_KEYS
]
=
{
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf500
,
0xf501
,
0xf509
,
0xf502
,
0xf50a
,
0xf503
,
0xf50b
,
0xf504
,
0xf701
,
0xf505
,
0xf200
,
0xf50
7
,
0xf200
,
0xf508
,
0xf703
,
0xf603
,
0xf11d
,
0xf200
,
0xf209
,
0xf50
6
,
0xf507
,
0xf508
,
0xf703
,
0xf603
,
0xf11d
,
0xf200
,
0xf209
,
0xf210
,
0xf200
,
0xf200
,
0xf600
,
0xf211
,
0xf81b
,
0xf831
,
0xf832
,
0xf833
,
0xf834
,
0xf835
,
0xf836
,
0xf837
,
0xf838
,
0xf839
,
0xf830
,
0xf82d
,
0xf83d
,
0xf860
,
0xf87f
,
0xf115
,
0xf200
,
0xf30d
,
0xf30c
,
...
...
@@ -122,7 +122,7 @@ u_short alt_map[NR_KEYS] = {
u_short
ctrl_alt_map
[
NR_KEYS
]
=
{
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf500
,
0xf501
,
0xf509
,
0xf502
,
0xf50a
,
0xf503
,
0xf50b
,
0xf504
,
0xf701
,
0xf505
,
0xf200
,
0xf50
7
,
0xf200
,
0xf508
,
0xf703
,
0xf603
,
0xf11d
,
0xf200
,
0xf200
,
0xf50
6
,
0xf507
,
0xf508
,
0xf703
,
0xf603
,
0xf11d
,
0xf200
,
0xf200
,
0xf601
,
0xf200
,
0xf200
,
0xf600
,
0xf602
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf200
,
0xf115
,
0xf200
,
0xf30d
,
0xf30c
,
...
...
drivers/sbus/char/sunkeymap.map
View file @
00e99d41
...
...
@@ -51,13 +51,13 @@ keycode 0x0e = F6 F16 Console_18
# BLANK KEY on type 5 keyboards
keycode 0x0f =
keycode 0x10 = F7 F17 Console_19
control
K
eycode 0x10 = F7
control
k
eycode 0x10 = F7
alt keycode 0x10 = Console_7
control alt keycode 0x10 = Console_7
keycode 0x11 = F8 F18 Console_20
control keycode 0x1
0
= F8
alt keycode 0x1
0
= Console_8
control alt keycode 0x1
0
= Console_8
control keycode 0x1
1
= F8
alt keycode 0x1
1
= Console_8
control alt keycode 0x1
1
= Console_8
keycode 0x12 = F9 F19 Console_21
control keycode 0x12 = F9
alt keycode 0x12 = Console_9
...
...
drivers/scsi/AM53C974.h
View file @
00e99d41
...
...
@@ -194,12 +194,12 @@
#define CNTLREG2 0x2C
/* rw control register two */
#define CNTLREG2_ENF 0x40
/* enable features */
#define CNTLREG3 0x30
/* rw control register three */
#define CNTLREG3 0x30
/* rw control register three */
#define CNTLREG3_ADIDCHK 0x80
/* additional ID check */
#define CNTLREG3_FASTSCSI 0x10
/* fast SCSI */
#define CNTLREG3_FASTCLK 0x08
/* fast SCSI clocking */
#define CNTLREG4 0x34
/* rw control register four */
#define CNTLREG4 0x34
/* rw control register four */
#define CNTLREG4_GLITCH 0xC0
/* glitch eater */
#define CNTLREG4_PWD 0x20
/* reduced power feature */
#define CNTLREG4_RAE 0x08
/* write only, active negot. ctrl. */
...
...
@@ -268,7 +268,7 @@ extern struct proc_dir_entry proc_scsi_am53c974;
#define AM53C974 { \
NULL,
/* pointer to next in list */
\
NULL,
/*
long * usage_count
*/
\
NULL,
/*
struct module *module
*/
\
&proc_scsi_am53c974,
/* struct proc_dir_entry *proc_dir */
\
NULL,
/* int (*proc_info)(char *, char **, off_t, int, int, int); */
\
"AM53C974",
/* name */
\
...
...
drivers/scsi/ChangeLog
View file @
00e99d41
Sat Jan 18 15:51:45 1997 Richard Henderson <r
ichard@twiddle.rth.home
>
Sat Jan 18 15:51:45 1997 Richard Henderson <r
th@tamu.edu
>
* Don't play with usage_count directly, instead hand around
the module header and use the module macros.
...
...
drivers/sound/audio.c
View file @
00e99d41
...
...
@@ -12,7 +12,7 @@
* for more info.
*/
#include <linux/config.h>
#include <linux/poll.h>
#include "sound_config.h"
...
...
@@ -542,44 +542,31 @@ audio_init_devices (void)
*/
}
int
audio_
select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
)
unsigned
int
audio_
poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
)
{
char
*
dma_buf
;
unsigned
int
mask
=
0
;
int
buf_no
,
buf_ptr
,
buf_size
;
dev
=
dev
>>
4
;
switch
(
sel_type
)
{
case
SEL_IN
:
if
(
audio_mode
[
dev
]
&
AM_WRITE
&&
!
(
audio_devs
[
dev
]
->
flags
&
DMA_DUPLEX
))
{
return
0
;
/* Not recording */
}
return
DMAbuf_select
(
dev
,
file
,
sel_type
,
wait
);
break
;
mask
=
DMAbuf_poll
(
dev
,
file
,
wait
);
case
SEL_OUT
:
if
(
audio_mode
[
dev
]
&
AM_READ
&&
!
(
audio_devs
[
dev
]
->
flags
&
DMA_DUPLEX
))
{
return
0
;
/* Wrong direction */
}
/* sel_in */
if
(
audio_mode
[
dev
]
&
AM_WRITE
&&
!
(
audio_devs
[
dev
]
->
flags
&
DMA_DUPLEX
))
mask
&=
~
(
POLLIN
|
POLLRDNORM
);
/* Wrong direction */
if
(
DMAbuf_get_curr_buffer
(
dev
,
&
buf_no
,
&
dma_buf
,
&
buf_ptr
,
&
buf_size
)
>=
0
)
{
return
1
;
/* There is space in the current buffer */
}
return
DMAbuf_select
(
dev
,
file
,
sel_type
,
wait
);
break
;
case
SEL_EX
:
return
0
;
}
/* sel_out */
if
(
audio_mode
[
dev
]
&
AM_READ
&&
!
(
audio_devs
[
dev
]
->
flags
&
DMA_DUPLEX
))
{
mask
&=
~
(
POLLOUT
|
POLLWRNORM
);
/* Wrong direction */
goto
sel_ex
;
}
if
(
DMAbuf_get_curr_buffer
(
dev
,
&
buf_no
,
&
dma_buf
,
&
buf_ptr
,
&
buf_size
)
>=
0
)
mask
|=
POLLOUT
|
POLLWRNORM
;
return
0
;
sel_ex:
return
mask
;
}
...
...
drivers/sound/dmabuf.c
View file @
00e99d41
...
...
@@ -11,7 +11,7 @@
* for more info.
*/
#include <linux/config.h>
#include <linux/poll.h>
#include "sound_config.h"
...
...
@@ -1834,109 +1834,70 @@ DMAbuf_reset_dma (int dev)
{
}
int
DMAbuf_
select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
)
unsigned
int
DMAbuf_
poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
)
{
unsigned
int
mask
=
0
;
struct
dma_buffparms
*
dmap
;
unsigned
long
flags
;
switch
(
sel_type
)
{
case
SEL_IN
:
if
(
!
(
audio_devs
[
dev
]
->
open_mode
))
return
0
;
dmap
=
audio_devs
[
dev
]
->
dmap_in
;
if
(
dmap
->
mapping_flags
&
DMA_MAP_MAPPED
)
{
if
(
dmap
->
qlen
)
return
1
;
save_flags
(
flags
);
cli
();
in_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
select_wait
(
&
in_sleeper
[
dev
],
wait
);
restore_flags
(
flags
);
return
0
;
}
if
(
dmap
->
dma_mode
!=
DMODE_INPUT
)
{
if
(
dmap
->
dma_mode
==
DMODE_NONE
&&
audio_devs
[
dev
]
->
enable_bits
&
PCM_ENABLE_INPUT
&&
!
dmap
->
qlen
&&
audio_devs
[
dev
]
->
go
)
{
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
activate_recording
(
dev
,
dmap
);
restore_flags
(
flags
);
}
return
0
;
}
if
(
!
dmap
->
qlen
)
{
save_flags
(
flags
);
cli
();
in_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
select_wait
(
&
in_sleeper
[
dev
],
wait
);
restore_flags
(
flags
);
return
0
;
}
return
1
;
break
;
case
SEL_OUT
:
dmap
=
audio_devs
[
dev
]
->
dmap_out
;
if
(
dmap
->
mapping_flags
&
DMA_MAP_MAPPED
)
{
if
(
dmap
->
qlen
)
return
1
;
save_flags
(
flags
);
cli
();
save_flags
(
flags
);
cli
();
in_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
poll_wait
(
&
in_sleeper
[
dev
],
wait
);
out_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
poll_wait
(
&
out_sleeper
[
dev
],
wait
);
out_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
select_wait
(
&
out_sleeper
[
dev
],
wait
);
restore_flags
(
flags
);
return
0
;
}
if
(
dmap
->
dma_mode
==
DMODE_INPUT
)
{
return
0
;
}
restore_flags
(
flags
);
if
(
dmap
->
dma_mode
==
DMODE_NONE
)
{
return
1
;
}
/* sel_in */
dmap
=
audio_devs
[
dev
]
->
dmap_in
;
if
(
!
(
audio_devs
[
dev
]
->
open_mode
))
goto
sel_out
;
if
(
dmap
->
mapping_flags
&
DMA_MAP_MAPPED
)
{
if
(
dmap
->
qlen
)
mask
|=
POLLIN
|
POLLRDNORM
;
goto
sel_out
;
}
if
(
dmap
->
dma_mode
!=
DMODE_INPUT
)
{
if
(
dmap
->
dma_mode
==
DMODE_NONE
&&
audio_devs
[
dev
]
->
enable_bits
&
PCM_ENABLE_INPUT
&&
!
dmap
->
qlen
&&
audio_devs
[
dev
]
->
go
)
{
unsigned
long
flags
;
if
(
!
space_in_queue
(
dev
))
{
save_flags
(
flags
);
cli
();
save_flags
(
flags
);
cli
();
activate_recording
(
dev
,
dmap
);
restore_flags
(
flags
);
}
goto
sel_out
;
}
if
(
!
dmap
->
qlen
)
goto
sel_out
;
mask
|=
POLLIN
|
POLLRDNORM
;
out_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
select_wait
(
&
out_sleeper
[
dev
],
wait
);
restore_flags
(
flags
);
return
0
;
}
return
1
;
break
;
sel_out:
dmap
=
audio_devs
[
dev
]
->
dmap_out
;
case
SEL_EX
:
return
0
;
}
if
(
dmap
->
mapping_flags
&
DMA_MAP_MAPPED
)
{
if
(
dmap
->
qlen
)
mask
|=
POLLOUT
|
POLLWRNORM
;
goto
sel_ex
;
}
if
(
dmap
->
dma_mode
==
DMODE_INPUT
)
goto
sel_ex
;
if
(
dmap
->
dma_mode
==
DMODE_NONE
)
{
mask
|=
POLLOUT
|
POLLWRNORM
;
goto
sel_ex
;
}
if
(
!
space_in_queue
(
dev
))
goto
sel_ex
;
mask
|=
POLLOUT
|
POLLWRNORM
;
return
0
;
sel_ex:
return
mask
;
}
...
...
drivers/sound/midibuf.c
View file @
00e99d41
...
...
@@ -11,6 +11,7 @@
* for more info.
*/
#include <linux/config.h>
#include <linux/poll.h>
#include "sound_config.h"
...
...
@@ -497,40 +498,21 @@ MIDIbuf_ioctl (int dev, struct fileinfo *file,
}
}
int
MIDIbuf_
select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
)
unsigned
int
MIDIbuf_
poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
)
{
dev
=
dev
>>
4
;
switch
(
sel_type
)
{
case
SEL_IN
:
if
(
!
DATA_AVAIL
(
midi_in_buf
[
dev
]))
{
input_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
select_wait
(
&
input_sleeper
[
dev
],
wait
);
return
0
;
}
return
1
;
break
;
case
SEL_OUT
:
if
(
SPACE_AVAIL
(
midi_out_buf
[
dev
]))
{
midi_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
select_wait
(
&
midi_sleeper
[
dev
],
wait
);
return
0
;
}
return
1
;
break
;
case
SEL_EX
:
return
0
;
}
return
0
;
unsigned
int
mask
=
0
;
input_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
poll_wait
(
&
input_sleeper
[
dev
],
wait
);
midi_sleep_flag
[
dev
].
opts
=
WK_SLEEP
;
poll_wait
(
&
midi_sleeper
[
dev
],
wait
);
if
(
DATA_AVAIL
(
midi_in_buf
[
dev
]))
mask
|=
POLLIN
|
POLLRDNORM
;
if
(
!
SPACE_AVAIL
(
midi_out_buf
[
dev
]))
mask
|=
POLLOUT
|
POLLWRNORM
;
return
mask
;
}
...
...
drivers/sound/sequencer.c
View file @
00e99d41
...
...
@@ -11,6 +11,7 @@
* for more info.
*/
#include <linux/config.h>
#include <linux/poll.h>
#define SEQUENCER_C
...
...
@@ -1768,50 +1769,28 @@ sequencer_ioctl (int dev, struct fileinfo *file,
return
-
EINVAL
;
}
int
sequencer_
select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
)
unsigned
int
sequencer_
poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
)
{
unsigned
int
mask
=
0
;
unsigned
long
flags
;
dev
=
dev
>>
4
;
switch
(
sel_type
)
{
case
SEL_IN
:
save_flags
(
flags
);
cli
();
if
(
!
iqlen
)
{
midi_sleep_flag
.
opts
=
WK_SLEEP
;
select_wait
(
&
midi_sleeper
,
wait
);
restore_flags
(
flags
);
return
0
;
}
restore_flags
(
flags
);
return
1
;
break
;
save_flags
(
flags
);
cli
();
case
SEL_OUT
:
save_flags
(
flags
);
cli
();
if
((
SEQ_MAX_QUEUE
-
qlen
)
<
output_threshold
)
{
midi_sleep_flag
.
opts
=
WK_SLEEP
;
poll_wait
(
&
midi_sleeper
,
wait
);
seq_sleep_flag
.
opts
=
WK_SLEEP
;
poll_wait
(
&
seq_sleeper
,
wait
);
seq_sleep_flag
.
opts
=
WK_SLEEP
;
select_wait
(
&
seq_sleeper
,
wait
);
restore_flags
(
flags
);
return
0
;
}
restore_flags
(
flags
);
return
1
;
break
;
restore_flags
(
flags
);
case
SEL_EX
:
return
0
;
}
if
(
iqlen
)
mask
|=
POLLIN
|
POLLRDNORM
;
if
((
SEQ_MAX_QUEUE
-
qlen
)
>=
output_threshold
)
mask
|=
POLLOUT
|
POLLWRNORM
;
return
0
;
return
mask
;
}
...
...
drivers/sound/sound_calls.h
View file @
00e99d41
...
...
@@ -18,7 +18,7 @@ void DMAbuf_close_dma (int dev);
void
DMAbuf_reset_dma
(
int
dev
);
void
DMAbuf_inputintr
(
int
dev
);
void
DMAbuf_outputintr
(
int
dev
,
int
underflow_flag
);
int
DMAbuf_select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
);
unsigned
int
DMAbuf_poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
);
void
DMAbuf_start_device
(
int
dev
);
void
DMAbuf_start_devices
(
unsigned
int
devmask
);
void
DMAbuf_reset
(
int
dev
);
...
...
@@ -36,7 +36,7 @@ int audio_ioctl (int dev, struct fileinfo *file,
unsigned
int
cmd
,
caddr_t
arg
);
void
audio_init_devices
(
void
);
int
audio_select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
);
unsigned
int
audio_poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
);
/*
* System calls for the /dev/sequencer
...
...
@@ -56,7 +56,7 @@ unsigned long compute_finetune(unsigned long base_freq, int bend, int range);
void
seq_input_event
(
unsigned
char
*
event
,
int
len
);
void
seq_copy_to_input
(
unsigned
char
*
event
,
int
len
);
int
sequencer_select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
);
unsigned
int
sequencer_poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
);
/*
* System calls for the /dev/midi
...
...
@@ -72,7 +72,7 @@ int MIDIbuf_lseek (int dev, struct fileinfo *file, off_t offset, int orig);
void
MIDIbuf_bytes_received
(
int
dev
,
unsigned
char
*
buf
,
int
count
);
void
MIDIbuf_init
(
void
);
int
MIDIbuf_select
(
int
dev
,
struct
fileinfo
*
file
,
int
sel_type
,
select
_table
*
wait
);
unsigned
int
MIDIbuf_poll
(
kdev_t
dev
,
struct
fileinfo
*
file
,
poll
_table
*
wait
);
/*
*
...
...
drivers/sound/soundcard.c
View file @
00e99d41
...
...
@@ -192,29 +192,29 @@ sound_ioctl (struct inode *inode, struct file *file,
return
err
;
}
static
int
sound_
select
(
struct
inode
*
inode
,
struct
file
*
file
,
int
sel_type
,
select
_table
*
wait
)
static
unsigned
int
sound_
poll
(
struct
file
*
file
,
poll
_table
*
wait
)
{
int
dev
;
dev
=
MINOR
(
inode
->
i_rdev
);
dev
=
MINOR
(
file
->
f_
inode
->
i_rdev
);
files
[
dev
].
flags
=
file
->
f_flags
;
DEB
(
printk
(
"sound_
select(dev=%d, type=0x%x)
\n
"
,
dev
,
sel_type
));
DEB
(
printk
(
"sound_
poll(dev=%d)
\n
"
,
dev
));
switch
(
dev
&
0x0f
)
{
#ifdef CONFIG_SEQUENCER
case
SND_DEV_SEQ
:
case
SND_DEV_SEQ2
:
return
sequencer_
select
(
dev
,
&
files
[
dev
],
sel_type
,
wait
);
return
sequencer_
poll
(
dev
,
&
files
[
dev
]
,
wait
);
break
;
#endif
#ifdef CONFIG_MIDI
case
SND_DEV_MIDIN
:
return
MIDIbuf_
select
(
dev
,
&
files
[
dev
],
sel_type
,
wait
);
return
MIDIbuf_
poll
(
dev
,
&
files
[
dev
]
,
wait
);
break
;
#endif
...
...
@@ -222,7 +222,7 @@ sound_select (struct inode *inode, struct file *file, int sel_type, select_table
case
SND_DEV_DSP
:
case
SND_DEV_DSP16
:
case
SND_DEV_AUDIO
:
return
audio_
select
(
dev
,
&
files
[
dev
],
sel_type
,
wait
);
return
audio_
poll
(
dev
,
&
files
[
dev
]
,
wait
);
break
;
#endif
...
...
@@ -327,7 +327,7 @@ static struct file_operations sound_fops =
sound_read
,
sound_write
,
NULL
,
/* sound_readdir */
sound_
select
,
sound_
poll
,
sound_ioctl
,
sound_mmap
,
sound_open
,
...
...
fs/binfmt_script.c
View file @
00e99d41
...
...
@@ -76,7 +76,6 @@ static int do_load_script(struct linux_binprm *bprm,struct pt_regs *regs)
/*
* OK, now restart the process with the interpreter's inode.
*/
bprm
->
filename
=
interp
;
retval
=
open_namei
(
interp
,
0
,
0
,
&
bprm
->
inode
,
NULL
);
if
(
retval
)
return
retval
;
...
...
fs/proc/array.c
View file @
00e99d41
...
...
@@ -1011,6 +1011,7 @@ extern int get_pci_list(char*);
extern
int
get_md_status
(
char
*
);
extern
int
get_rtc_status
(
char
*
);
extern
int
get_locks_status
(
char
*
);
extern
int
get_swaparea_info
(
char
*
);
#ifdef __SMP_PROF__
extern
int
get_smp_prof_list
(
char
*
);
#endif
...
...
@@ -1088,6 +1089,9 @@ static long get_root_array(char * page, int type, char **start,
case
PROC_MTAB
:
return
get_filesystem_info
(
page
);
case
PROC_SWAP
:
return
get_swaparea_info
(
page
);
#ifdef CONFIG_RTC
case
PROC_RTC
:
return
get_rtc_status
(
page
);
...
...
fs/proc/root.c
View file @
00e99d41
...
...
@@ -510,6 +510,10 @@ static struct proc_dir_entry proc_root_mounts = {
PROC_MTAB
,
6
,
"mounts"
,
S_IFREG
|
S_IRUGO
,
1
,
0
,
0
,
};
static
struct
proc_dir_entry
proc_root_swaps
=
{
PROC_MTAB
,
5
,
"swaps"
,
S_IFREG
|
S_IRUGO
,
1
,
0
,
0
,
};
static
struct
proc_dir_entry
proc_root_profile
=
{
PROC_PROFILE
,
7
,
"profile"
,
S_IFREG
|
S_IRUGO
|
S_IWUSR
,
1
,
0
,
0
,
...
...
@@ -572,6 +576,7 @@ void proc_root_init(void)
proc_register
(
&
proc_root
,
&
proc_root_locks
);
proc_register
(
&
proc_root
,
&
proc_root_mounts
);
proc_register
(
&
proc_root
,
&
proc_root_swaps
);
#if defined(CONFIG_SUN_OPENPROMFS) || defined(CONFIG_SUN_OPENPROMFS_MODULE)
#ifdef CONFIG_SUN_OPENPROMFS
...
...
include/asm-sparc/namei.h
View file @
00e99d41
/* $Id: namei.h,v 1.
1 1996/12/13 14:48:20 jj
Exp $
/* $Id: namei.h,v 1.
3 1997/01/26 23:36:36 davem
Exp $
* linux/include/asm-sparc/namei.h
*
* Routines to handle famous /usr/gnemul/s*.
...
...
@@ -11,8 +11,7 @@
#define SPARC_BSD_EMUL "usr/gnemul/sunos/"
#define SPARC_SOL_EMUL "usr/gnemul/solaris/"
#if 1
#define gnemul_namei(pathname, base, follow_links, res_inode) ({ \
#define translate_namei(pathname, base, follow_links, res_inode) ({ \
if ((current->personality & (PER_BSD|PER_SVR4)) && !base && *pathname == '/') { \
struct inode *emul_ino; \
int namelen; \
...
...
@@ -31,11 +30,8 @@
base->i_count++; \
} \
})
#else
#define gnemul_namei(pathname, base, follow_links, res_inode) do { } while (0)
#endif
#define
gnemul
_open_namei(pathname, flag, mode, res_inode, base) ({ \
#define
translate
_open_namei(pathname, flag, mode, res_inode, base) ({ \
if ((current->personality & (PER_BSD|PER_SVR4)) && !base && *pathname == '/') { \
struct inode *emul_ino; \
int namelen; \
...
...
include/linux/proc_fs.h
View file @
00e99d41
...
...
@@ -43,6 +43,7 @@ enum root_directory_inos {
PROC_CMDLINE
,
PROC_SYS
,
PROC_MTAB
,
PROC_SWAP
,
PROC_MD
,
PROC_RTC
,
PROC_LOCKS
,
...
...
include/linux/sched.h
View file @
00e99d41
...
...
@@ -154,7 +154,7 @@ struct mm_struct {
#define INIT_MM { \
1, \
swapper_pg_dir, \
-1
, \
0
, \
0, 0, 0, 0, \
0, 0, 0, 0, \
0, 0, 0, 0, \
...
...
include/linux/swap.h
View file @
00e99d41
...
...
@@ -19,6 +19,7 @@
struct
swap_info_struct
{
unsigned
int
flags
;
kdev_t
swap_device
;
char
*
swap_filename
;
struct
inode
*
swap_file
;
unsigned
char
*
swap_map
;
unsigned
char
*
swap_lockmap
;
...
...
include/net/sock.h
View file @
00e99d41
...
...
@@ -293,6 +293,14 @@ struct tcp_opt
* }
*/
/* Define this to get the sk->debug debugging facility. */
#define SOCK_DEBUGGING
#ifdef SOCK_DEBUGGING
#define SOCK_DEBUG(sk, msg...) if((sk) && ((sk)->debug)) printk(KERN_DEBUG ## msg)
#else
#define SOCK_DEBUG(sk, msg...) do { } while (0)
#endif
/*
* TCP will start to use the new protinfo while *still using the old* fields
*/
...
...
include/net/tcp.h
View file @
00e99d41
...
...
@@ -432,8 +432,7 @@ static __inline__ void tcp_set_state(struct sock *sk, int state)
sk
->
state
=
state
;
#ifdef STATE_TRACE
if
(
sk
->
debug
)
printk
(
"TCP sk=%p, State %s -> %s
\n
"
,
sk
,
statename
[
oldstate
],
statename
[
state
]);
SOCK_DEBUG
(
sk
,
"TCP sk=%p, State %s -> %s
\n
"
,
sk
,
statename
[
oldstate
],
statename
[
state
]);
#endif
switch
(
state
)
{
...
...
kernel/sched.c
View file @
00e99d41
...
...
@@ -6,6 +6,7 @@
* 1996-04-21 Modified by Ulrich Windl to make NTP work
* 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and
* make semaphores SMP safe
* 1997-01-28 Modified by Finn Arne Gangstad to make timers scale better.
*/
/*
...
...
@@ -630,74 +631,174 @@ void sleep_on(struct wait_queue **p)
__sleep_on
(
p
,
TASK_UNINTERRUPTIBLE
);
}
/*
* The head for the timer-list has a "expires" field of MAX_UINT,
* and the sorting routine counts on this..
*/
static
struct
timer_list
timer_head
=
{
&
timer_head
,
&
timer_head
,
~
0
,
0
,
NULL
};
#define TVN_BITS 6
#define TVR_BITS 8
#define TVN_SIZE (1 << TVN_BITS)
#define TVR_SIZE (1 << TVR_BITS)
#define TVN_MASK (TVN_SIZE - 1)
#define TVR_MASK (TVR_SIZE - 1)
#define SLOW_BUT_DEBUGGING_TIMERS 0
void
add_timer
(
struct
timer_list
*
timer
)
struct
timer_vec
{
int
index
;
struct
timer_list
*
vec
[
TVN_SIZE
];
};
struct
timer_vec_root
{
int
index
;
struct
timer_list
*
vec
[
TVR_SIZE
];
};
static
struct
timer_vec
tv5
=
{
0
};
static
struct
timer_vec
tv4
=
{
0
};
static
struct
timer_vec
tv3
=
{
0
};
static
struct
timer_vec
tv2
=
{
0
};
static
struct
timer_vec_root
tv1
=
{
0
};
static
struct
timer_vec
*
const
tvecs
[]
=
{
(
struct
timer_vec
*
)
&
tv1
,
&
tv2
,
&
tv3
,
&
tv4
,
&
tv5
};
#define NOOF_TVECS (sizeof(tvecs) / sizeof(tvecs[0]))
static
unsigned
long
timer_jiffies
=
0
;
static
inline
void
insert_timer
(
struct
timer_list
*
timer
,
struct
timer_list
**
vec
,
int
idx
)
{
unsigned
long
flags
;
struct
timer_list
*
p
;
if
((
timer
->
next
=
vec
[
idx
]))
vec
[
idx
]
->
prev
=
timer
;
vec
[
idx
]
=
timer
;
timer
->
prev
=
(
struct
timer_list
*
)
&
vec
[
idx
];
}
#if SLOW_BUT_DEBUGGING_TIMERS
if
(
timer
->
next
||
timer
->
prev
)
{
printk
(
"add_timer() called with non-zero list from %p
\n
"
,
__builtin_return_address
(
0
));
return
;
static
inline
void
internal_add_timer
(
struct
timer_list
*
timer
)
{
/*
* must be cli-ed when calling this
*/
unsigned
long
expires
=
timer
->
expires
;
unsigned
long
idx
=
expires
-
timer_jiffies
;
if
(
idx
<
TVR_SIZE
)
{
int
i
=
expires
&
TVR_MASK
;
insert_timer
(
timer
,
tv1
.
vec
,
i
);
}
else
if
(
idx
<
1
<<
(
TVR_BITS
+
TVN_BITS
))
{
int
i
=
(
expires
>>
TVR_BITS
)
&
TVN_MASK
;
insert_timer
(
timer
,
tv2
.
vec
,
i
);
}
else
if
(
idx
<
1
<<
(
TVR_BITS
+
2
*
TVN_BITS
))
{
int
i
=
(
expires
>>
(
TVR_BITS
+
TVN_BITS
))
&
TVN_MASK
;
insert_timer
(
timer
,
tv3
.
vec
,
i
);
}
else
if
(
idx
<
1
<<
(
TVR_BITS
+
3
*
TVN_BITS
))
{
int
i
=
(
expires
>>
(
TVR_BITS
+
2
*
TVN_BITS
))
&
TVN_MASK
;
insert_timer
(
timer
,
tv4
.
vec
,
i
);
}
else
if
((
idx
+
1UL
)
==
0UL
)
{
/* can happen if you add a timer with expires == jiffies */
insert_timer
(
timer
,
tv1
.
vec
,
tv1
.
index
);
}
else
if
(
idx
<
0xffffffffUL
)
{
int
i
=
(
expires
>>
(
TVR_BITS
+
3
*
TVN_BITS
))
&
TVN_MASK
;
insert_timer
(
timer
,
tv5
.
vec
,
i
);
}
else
{
/* Can only get here on architectures with 64-bit jiffies */
timer
->
next
=
timer
->
prev
=
timer
;
}
#endif
p
=
&
timer_head
;
}
void
add_timer
(
struct
timer_list
*
timer
)
{
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
do
{
p
=
p
->
next
;
}
while
(
timer
->
expires
>
p
->
expires
);
timer
->
next
=
p
;
timer
->
prev
=
p
->
prev
;
p
->
prev
=
timer
;
timer
->
prev
->
next
=
timer
;
#if SLOW_BUT_DEBUGGING_TIMERS
if
(
timer
->
next
||
timer
->
prev
)
{
printk
(
"add_timer() called with non-zero list from %p
\n
"
,
__builtin_return_address
(
0
));
goto
out
;
}
#endif
internal_add_timer
(
timer
);
#if SLOW_BUT_DEBUGGING_TIMERS
out:
#endif
restore_flags
(
flags
);
}
int
del_timer
(
struct
timer_list
*
timer
)
static
inline
int
detach_timer
(
struct
timer_list
*
timer
)
{
int
ret
=
0
;
if
(
timer
->
next
)
{
unsigned
long
flags
;
struct
timer_list
*
next
;
save_flags
(
flags
);
cli
();
if
((
next
=
timer
->
next
)
!=
NULL
)
{
(
next
->
prev
=
timer
->
prev
)
->
next
=
next
;
timer
->
next
=
timer
->
prev
=
NULL
;
ret
=
1
;
}
restore_flags
(
flags
);
struct
timer_list
*
next
,
*
prev
;
next
=
timer
->
next
;
prev
=
timer
->
prev
;
if
(
next
)
{
next
->
prev
=
prev
;
}
if
(
prev
)
{
ret
=
1
;
prev
->
next
=
next
;
}
return
ret
;
}
static
inline
void
run_timer_list
(
void
)
int
del_timer
(
struct
timer_list
*
timer
)
{
int
ret
;
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
ret
=
detach_timer
(
timer
);
timer
->
next
=
timer
->
prev
=
0
;
restore_flags
(
flags
);
return
ret
;
}
static
inline
void
cascade_timers
(
struct
timer_vec
*
tv
)
{
struct
timer_list
*
timer
;
/* cascade all the timers from tv up one level */
struct
timer_list
*
timer
;
timer
=
tv
->
vec
[
tv
->
index
];
/*
* We are removing _all_ timers from the list, so we don't have to
* detach them individually, just clear the list afterwards.
*/
while
(
timer
)
{
struct
timer_list
*
tmp
=
timer
;
timer
=
timer
->
next
;
internal_add_timer
(
tmp
);
}
tv
->
vec
[
tv
->
index
]
=
NULL
;
tv
->
index
=
(
tv
->
index
+
1
)
&
TVN_MASK
;
}
static
inline
void
run_timer_list
(
void
)
{
cli
();
while
((
timer
=
timer_head
.
next
)
!=
&
timer_head
&&
timer
->
expires
<=
jiffies
)
{
void
(
*
fn
)(
unsigned
long
)
=
timer
->
function
;
unsigned
long
data
=
timer
->
data
;
timer
->
next
->
prev
=
timer
->
prev
;
timer
->
prev
->
next
=
timer
->
next
;
timer
->
next
=
timer
->
prev
=
NULL
;
sti
();
fn
(
data
);
cli
();
while
((
long
)(
jiffies
-
timer_jiffies
)
>=
0
)
{
struct
timer_list
*
timer
;
if
(
!
tv1
.
index
)
{
int
n
=
1
;
do
{
cascade_timers
(
tvecs
[
n
]);
}
while
(
tvecs
[
n
]
->
index
==
1
&&
++
n
<
NOOF_TVECS
);
}
while
((
timer
=
tv1
.
vec
[
tv1
.
index
]))
{
void
(
*
fn
)(
unsigned
long
)
=
timer
->
function
;
unsigned
long
data
=
timer
->
data
;
detach_timer
(
timer
);
timer
->
next
=
timer
->
prev
=
NULL
;
sti
();
fn
(
data
);
cli
();
}
++
timer_jiffies
;
tv1
.
index
=
(
tv1
.
index
+
1
)
&
TVR_MASK
;
}
sti
();
}
static
inline
void
run_old_timers
(
void
)
{
struct
timer_struct
*
tp
;
...
...
mm/swapfile.c
View file @
00e99d41
...
...
@@ -18,6 +18,7 @@
#include <linux/swap.h>
#include <linux/fs.h>
#include <linux/swapctl.h>
#include <linux/malloc.h>
#include <linux/blkdev.h>
/* for blk_size */
#include <linux/vmalloc.h>
...
...
@@ -393,6 +394,8 @@ asmlinkage int sys_swapoff(const char * specialfile)
nr_swap_pages
-=
p
->
pages
;
iput
(
p
->
swap_file
);
if
(
p
->
swap_filename
)
kfree
(
p
->
swap_filename
);
p
->
swap_file
=
NULL
;
p
->
swap_device
=
0
;
vfree
(
p
->
swap_map
);
...
...
@@ -406,6 +409,37 @@ asmlinkage int sys_swapoff(const char * specialfile)
return
err
;
}
int
get_swaparea_info
(
char
*
buf
)
{
struct
swap_info_struct
*
ptr
=
swap_info
;
int
i
,
j
,
len
=
0
,
usedswap
;
len
+=
sprintf
(
buf
,
"Filename
\t\t\t
Type
\t\t
Size
\t
Used
\t
Priority
\n
"
);
for
(
i
=
0
;
i
<
nr_swapfiles
;
i
++
,
ptr
++
)
if
(
ptr
->
flags
&
SWP_USED
)
{
if
(
ptr
->
swap_filename
)
len
+=
sprintf
(
buf
+
len
,
"%-31s "
,
ptr
->
swap_filename
);
else
len
+=
sprintf
(
buf
+
len
,
"(null)
\t\t\t
"
);
if
(
ptr
->
swap_file
)
len
+=
sprintf
(
buf
+
len
,
"file
\t\t
"
);
else
len
+=
sprintf
(
buf
+
len
,
"partition
\t
"
);
usedswap
=
0
;
for
(
j
=
0
;
j
<
ptr
->
max
;
++
j
)
switch
(
ptr
->
swap_map
[
j
])
{
case
128
:
case
0
:
continue
;
default:
usedswap
++
;
}
len
+=
sprintf
(
buf
+
len
,
"%d
\t
%d
\t
%d
\n
"
,
ptr
->
pages
<<
(
PAGE_SHIFT
-
10
),
usedswap
<<
(
PAGE_SHIFT
-
10
),
ptr
->
prio
);
}
return
len
;
}
/*
* Written 01/25/92 by Simmule Turner, heavily changed by Linus.
*
...
...
@@ -418,6 +452,7 @@ asmlinkage int sys_swapon(const char * specialfile, int swap_flags)
unsigned
int
type
;
int
i
,
j
,
prev
;
int
error
=
-
EPERM
;
char
*
tmp
;
struct
file
filp
;
static
int
least_priority
=
0
;
...
...
@@ -434,6 +469,7 @@ asmlinkage int sys_swapon(const char * specialfile, int swap_flags)
if
(
type
>=
nr_swapfiles
)
nr_swapfiles
=
type
+
1
;
p
->
flags
=
SWP_USED
;
p
->
swap_filename
=
NULL
;
p
->
swap_file
=
NULL
;
p
->
swap_device
=
0
;
p
->
swap_map
=
NULL
;
...
...
@@ -541,6 +577,12 @@ asmlinkage int sys_swapon(const char * specialfile, int swap_flags)
prev
=
i
;
}
p
->
next
=
i
;
if
(
!
getname
(
specialfile
,
&
tmp
))
{
if
((
p
->
swap_filename
=
(
char
*
)
kmalloc
(
strlen
(
tmp
)
+
1
,
GFP_KERNEL
))
!=
(
char
*
)
NULL
)
strcpy
(
p
->
swap_filename
,
tmp
);
putname
(
tmp
);
}
if
(
prev
<
0
)
{
swap_list
.
head
=
swap_list
.
next
=
p
-
swap_info
;
}
else
{
...
...
net/appletalk/ddp.c
View file @
00e99d41
...
...
@@ -1484,8 +1484,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
/* Build a packet */
if
(
sk
->
debug
)
printk
(
"SK %p: Got address.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: Got address.
\n
"
,
sk
);
size
=
sizeof
(
struct
ddpehdr
)
+
len
+
ddp_dl
->
header_length
;
/* For headers */
...
...
@@ -1507,8 +1506,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
dev
=
rt
->
dev
;
}
if
(
sk
->
debug
)
printk
(
"SK %p: Size needed %d, device %s
\n
"
,
sk
,
size
,
dev
->
name
);
SOCK_DEBUG
(
sk
,
"SK %p: Size needed %d, device %s
\n
"
,
sk
,
size
,
dev
->
name
);
size
+=
dev
->
hard_header_len
;
...
...
@@ -1523,8 +1521,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
skb
->
dev
=
dev
;
if
(
sk
->
debug
)
printk
(
"SK %p: Begin build.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: Begin build.
\n
"
,
sk
);
ddp
=
(
struct
ddpehdr
*
)
skb_put
(
skb
,
sizeof
(
struct
ddpehdr
));
ddp
->
deh_pad
=
0
;
...
...
@@ -1544,8 +1541,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
ddp
->
deh_dport
=
usat
->
sat_port
;
ddp
->
deh_sport
=
sk
->
protinfo
.
af_at
.
src_port
;
if
(
sk
->
debug
)
printk
(
"SK %p: Copy user data (%d bytes).
\n
"
,
sk
,
len
);
SOCK_DEBUG
(
sk
,
"SK %p: Copy user data (%d bytes).
\n
"
,
sk
,
len
);
err
=
memcpy_fromiovec
(
skb_put
(
skb
,
len
),
msg
->
msg_iov
,
len
);
if
(
err
)
...
...
@@ -1582,8 +1578,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
if
(
skb2
)
{
loopback
=
1
;
if
(
sk
->
debug
)
printk
(
"SK %p: send out(copy).
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: send out(copy).
\n
"
,
sk
);
if
(
aarp_send_ddp
(
dev
,
skb2
,
&
usat
->
sat_addr
,
NULL
)
==-
1
)
kfree_skb
(
skb2
,
FREE_WRITE
);
/* else queued/sent above in the aarp queue */
...
...
@@ -1593,8 +1588,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
if
((
dev
->
flags
&
IFF_LOOPBACK
)
||
loopback
)
{
if
(
sk
->
debug
)
printk
(
"SK %p: Loop back.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: Loop back.
\n
"
,
sk
);
/* loop back */
skb_orphan
(
skb
);
ddp_dl
->
datalink_header
(
ddp_dl
,
skb
,
dev
->
dev_addr
);
...
...
@@ -1606,9 +1600,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
}
else
{
if
(
sk
->
debug
)
printk
(
"SK %p: send out.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: send out.
\n
"
,
sk
);
if
(
rt
->
flags
&
RTF_GATEWAY
)
{
gsat
.
sat_addr
=
rt
->
gateway
;
usat
=
&
gsat
;
...
...
@@ -1618,8 +1610,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
kfree_skb
(
skb
,
FREE_WRITE
);
/* else queued/sent above in the aarp queue */
}
if
(
sk
->
debug
)
printk
(
"SK %p: Done write (%d).
\n
"
,
sk
,
len
);
SOCK_DEBUG
(
sk
,
"SK %p: Done write (%d).
\n
"
,
sk
,
len
);
return
len
;
}
...
...
net/ax25/af_ax25.c
View file @
00e99d41
...
...
@@ -1374,41 +1374,32 @@ static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
else
sk
->
protinfo
.
ax25
->
source_addr
=
*
call
;
if
(
sk
->
debug
)
printk
(
"AX25: source address set to %s
\n
"
,
ax2asc
(
&
sk
->
protinfo
.
ax25
->
source_addr
));
SOCK_DEBUG
(
sk
,
"AX25: source address set to %s
\n
"
,
ax2asc
(
&
sk
->
protinfo
.
ax25
->
source_addr
));
if
(
addr_len
==
sizeof
(
struct
full_sockaddr_ax25
)
&&
addr
->
fsa_ax25
.
sax25_ndigis
==
1
)
{
if
(
ax25cmp
(
&
addr
->
fsa_digipeater
[
0
],
&
null_ax25_address
)
==
0
)
{
dev
=
NULL
;
if
(
sk
->
debug
)
printk
(
"AX25: bound to any device
\n
"
);
SOCK_DEBUG
(
sk
,
"AX25: bound to any device
\n
"
);
}
else
{
if
((
dev
=
ax25rtr_get_dev
(
&
addr
->
fsa_digipeater
[
0
]))
==
NULL
)
{
if
(
sk
->
debug
)
printk
(
"AX25: bind failed - no device
\n
"
);
SOCK_DEBUG
(
sk
,
"AX25: bind failed - no device
\n
"
);
return
-
EADDRNOTAVAIL
;
}
if
(
sk
->
debug
)
printk
(
"AX25: bound to device %s
\n
"
,
dev
->
name
);
SOCK_DEBUG
(
sk
,
"AX25: bound to device %s
\n
"
,
dev
->
name
);
}
}
else
{
if
((
dev
=
ax25rtr_get_dev
(
&
addr
->
fsa_ax25
.
sax25_call
))
==
NULL
)
{
if
(
sk
->
debug
)
printk
(
"AX25: bind failed - no device
\n
"
);
SOCK_DEBUG
(
sk
,
"AX25: bind failed - no device
\n
"
);
return
-
EADDRNOTAVAIL
;
}
if
(
sk
->
debug
)
printk
(
"AX25: bound to device %s
\n
"
,
dev
->
name
);
SOCK_DEBUG
(
sk
,
"AX25: bound to device %s
\n
"
,
dev
->
name
);
}
ax25_fillin_cb
(
sk
->
protinfo
.
ax25
,
dev
);
ax25_insert_socket
(
sk
->
protinfo
.
ax25
);
sk
->
zapped
=
0
;
if
(
sk
->
debug
)
printk
(
"AX25: socket is bound
\n
"
);
SOCK_DEBUG
(
sk
,
"AX25: socket is bound
\n
"
);
return
0
;
}
...
...
@@ -2028,12 +2019,10 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, int len,
dp
=
sk
->
protinfo
.
ax25
->
digipeat
;
}
if
(
sk
->
debug
)
printk
(
"AX.25: sendto: Addresses built.
\n
"
);
SOCK_DEBUG
(
sk
,
"AX.25: sendto: Addresses built.
\n
"
);
/* Build a packet */
if
(
sk
->
debug
)
printk
(
"AX.25: sendto: building packet.
\n
"
);
SOCK_DEBUG
(
sk
,
"AX.25: sendto: building packet.
\n
"
);
/* Assume the worst case */
size
=
len
+
3
+
size_ax25_addr
(
dp
)
+
AX25_BPQ_HEADER_LEN
;
...
...
@@ -2045,8 +2034,7 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, int len,
skb_reserve
(
skb
,
size
-
len
);
if
(
sk
->
debug
)
printk
(
"AX.25: Appending user data
\n
"
);
SOCK_DEBUG
(
sk
,
"AX.25: Appending user data
\n
"
);
/* User data follows immediately after the AX.25 data */
memcpy_fromiovec
(
skb_put
(
skb
,
len
),
msg
->
msg_iov
,
len
);
...
...
@@ -2055,8 +2043,7 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, int len,
asmptr
=
skb_push
(
skb
,
1
);
*
asmptr
=
sk
->
protocol
;
if
(
sk
->
debug
)
printk
(
"AX.25: Transmitting buffer
\n
"
);
SOCK_DEBUG
(
sk
,
"AX.25: Transmitting buffer
\n
"
);
if
(
sk
->
type
==
SOCK_SEQPACKET
)
{
/* Connected mode sockets go via the LAPB machine */
...
...
@@ -2071,22 +2058,18 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, int len,
}
else
{
asmptr
=
skb_push
(
skb
,
1
+
size_ax25_addr
(
dp
));
if
(
sk
->
debug
)
{
printk
(
"Building AX.25 Header (dp=%p).
\n
"
,
dp
);
if
(
dp
!=
0
)
printk
(
"Num digipeaters=%d
\n
"
,
dp
->
ndigi
);
}
SOCK_DEBUG
(
sk
,
"Building AX.25 Header (dp=%p).
\n
"
,
dp
);
if
(
dp
!=
0
)
SOCK_DEBUG
(
sk
,
"Num digipeaters=%d
\n
"
,
dp
->
ndigi
);
/* Build an AX.25 header */
asmptr
+=
(
lv
=
build_ax25_addr
(
asmptr
,
&
sk
->
protinfo
.
ax25
->
source_addr
,
&
sax
.
sax25_call
,
dp
,
AX25_COMMAND
,
AX25_MODULUS
));
if
(
sk
->
debug
)
printk
(
"Built header (%d bytes)
\n
"
,
lv
);
SOCK_DEBUG
(
sk
,
"Built header (%d bytes)
\n
"
,
lv
);
skb
->
h
.
raw
=
asmptr
;
if
(
sk
->
debug
)
printk
(
"base=%p pos=%p
\n
"
,
skb
->
data
,
asmptr
);
SOCK_DEBUG
(
sk
,
"base=%p pos=%p
\n
"
,
skb
->
data
,
asmptr
);
*
asmptr
=
AX25_UI
;
...
...
net/ax25/ax25_subr.c
View file @
00e99d41
...
...
@@ -528,8 +528,7 @@ void ax25_kiss_cmd(ax25_cb *ax25, unsigned char cmd, unsigned char param)
void
ax25_dama_on
(
ax25_cb
*
ax25
)
{
if
(
ax25_dev_is_dama_slave
(
ax25
->
device
)
==
0
)
{
if
(
ax25
->
sk
!=
NULL
&&
ax25
->
sk
->
debug
)
printk
(
"ax25_dama_on: DAMA on
\n
"
);
SOCK_DEBUG
(
ax25
->
sk
,
"ax25_dama_on: DAMA on
\n
"
);
ax25_kiss_cmd
(
ax25
,
5
,
1
);
}
}
...
...
@@ -541,8 +540,7 @@ void ax25_dama_off(ax25_cb *ax25)
ax25
->
dama_slave
=
0
;
if
(
ax25_dev_is_dama_slave
(
ax25
->
device
)
==
0
)
{
if
(
ax25
->
sk
!=
NULL
&&
ax25
->
sk
->
debug
)
printk
(
"ax25_dama_off: DAMA off
\n
"
);
SOCK_DEBUG
(
ax25
->
sk
,
"ax25_dama_off: DAMA off
\n
"
);
ax25_kiss_cmd
(
ax25
,
5
,
0
);
}
}
...
...
net/ax25/ax25_timer.c
View file @
00e99d41
...
...
@@ -149,8 +149,7 @@ static void ax25_timer(unsigned long param)
ax25
->
state
=
AX25_STATE_0
;
if
(
ax25
->
sk
!=
NULL
)
{
if
(
ax25
->
sk
->
debug
)
printk
(
KERN_DEBUG
"AX.25 T3 Timeout
\n
"
);
SOCK_DEBUG
(
ax25
->
sk
,
"AX.25 T3 Timeout
\n
"
);
ax25
->
sk
->
state
=
TCP_CLOSE
;
ax25
->
sk
->
err
=
ETIMEDOUT
;
ax25
->
sk
->
shutdown
|=
SEND_SHUTDOWN
;
...
...
@@ -298,8 +297,7 @@ void ax25_t1_timeout(ax25_cb * ax25)
ax25_send_control
(
ax25
,
AX25_DM
,
AX25_POLLON
,
AX25_RESPONSE
);
ax25
->
state
=
AX25_STATE_0
;
if
(
ax25
->
sk
!=
NULL
)
{
if
(
ax25
->
sk
->
debug
)
printk
(
KERN_DEBUG
"AX.25 link Failure
\n
"
);
SOCK_DEBUG
(
ax25
->
sk
,
"AX.25 link Failure
\n
"
);
ax25
->
sk
->
state
=
TCP_CLOSE
;
ax25
->
sk
->
err
=
ETIMEDOUT
;
ax25
->
sk
->
shutdown
|=
SEND_SHUTDOWN
;
...
...
net/ipv4/tcp.c
View file @
00e99d41
...
...
@@ -524,16 +524,13 @@ static int tcp_readable(struct sock *sk)
int
sum
;
unsigned
long
flags
;
if
(
sk
&&
sk
->
debug
)
printk
(
"tcp_readable: %p - "
,
sk
);
SOCK_DEBUG
(
sk
,
"tcp_readable: %p - "
,
sk
);
save_flags
(
flags
);
cli
();
if
(
sk
==
NULL
||
(
skb
=
skb_peek
(
&
sk
->
receive_queue
))
==
NULL
)
{
restore_flags
(
flags
);
if
(
sk
&&
sk
->
debug
)
printk
(
"empty
\n
"
);
SOCK_DEBUG
(
sk
,
"empty
\n
"
);
return
(
0
);
}
...
...
@@ -592,8 +589,7 @@ static int tcp_readable(struct sock *sk)
while
(
skb
!=
(
struct
sk_buff
*
)
&
sk
->
receive_queue
);
restore_flags
(
flags
);
if
(
sk
->
debug
)
printk
(
"got %lu bytes.
\n
"
,
amount
);
SOCK_DEBUG
(
sk
,
"got %lu bytes.
\n
"
,
amount
);
return
(
amount
);
}
...
...
@@ -1043,9 +1039,6 @@ int tcp_do_sendmsg(struct sock *sk, int iovlen, struct iovec *iov,
sk
->
write_seq
+=
copy
;
tcp_send_skb
(
sk
,
skb
);
release_sock
(
sk
);
lock_sock
(
sk
);
}
}
...
...
@@ -1159,7 +1152,7 @@ static int tcp_recv_urg(struct sock * sk, int nonblock,
static
inline
void
tcp_eat_skb
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
sk
->
ack_backlog
++
;
sk
->
delayed_acks
++
;
__skb_unlink
(
skb
,
&
sk
->
receive_queue
);
kfree_skb
(
skb
,
FREE_READ
);
...
...
@@ -1169,41 +1162,36 @@ static inline void tcp_eat_skb(struct sock *sk, struct sk_buff * skb)
static
void
cleanup_rbuf
(
struct
sock
*
sk
)
{
struct
sk_buff
*
skb
;
struct
tcp_opt
*
tp
=
&
(
sk
->
tp_pinfo
.
af_tcp
);
unsigned
long
pspace
,
rspace
;
/*
* NOTE! The socket must be locked, so that we don't get
* a messed-up receive queue.
*/
pspace
=
sock_rspace
(
sk
);
while
((
skb
=
skb_peek
(
&
sk
->
receive_queue
))
!=
NULL
)
{
if
(
!
skb
->
used
||
skb
->
users
>
1
)
break
;
tcp_eat_skb
(
sk
,
skb
);
}
if
(
sk
->
debug
)
printk
(
"sk->rspace = %lu
\n
"
,
sock_rspace
(
sk
));
SOCK_DEBUG
(
sk
,
"sk->rspace = %lu
\n
"
,
sock_rspace
(
sk
));
/*
* We send a ACK if the sender is blocked
* else let tcp_data deal with the acking policy.
*/
rspace
=
sock_rspace
(
sk
);
if
((
rspace
>
pspace
)
&&
(
rspace
>
tp
->
rcv_wnd
-
(
tp
->
rcv_nxt
-
tp
->
rcv_wup
))
&&
(
tp
->
rcv_wnd
-
(
tp
->
rcv_nxt
-
tp
->
rcv_wup
)
<
sk
->
mss
))
if
(
sk
->
delayed_acks
)
{
/* Send an ack right now. */
sk
->
delayed_acks
++
;
tcp_read_wakeup
(
sk
);
}
}
struct
tcp_opt
*
tp
=
&
(
sk
->
tp_pinfo
.
af_tcp
);
__u32
rcv_wnd
;
rcv_wnd
=
tp
->
rcv_wnd
-
(
tp
->
rcv_nxt
-
tp
->
rcv_wup
);
if
((
rcv_wnd
<
sk
->
mss
)
&&
(
sock_rspace
(
sk
)
>
rcv_wnd
))
tcp_read_wakeup
(
sk
);
}
}
/*
...
...
@@ -1413,7 +1401,8 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg,
*/
*
seq
-=
err
;
atomic_dec
(
&
skb
->
users
);
return
-
EFAULT
;
copied
=
-
EFAULT
;
break
;
}
copied
+=
used
;
...
...
@@ -1467,7 +1456,7 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg,
msg
->
msg_name
);
}
if
(
addr_len
)
*
addr_len
=
tp
->
af_specific
->
sockaddr_len
;
*
addr_len
=
tp
->
af_specific
->
sockaddr_len
;
remove_wait_queue
(
sk
->
sleep
,
&
wait
);
current
->
state
=
TASK_RUNNING
;
...
...
@@ -1583,10 +1572,10 @@ void tcp_shutdown(struct sock *sk, int how)
/*
* FIN if needed
*/
if
(
tcp_close_state
(
sk
,
0
))
tcp_send_fin
(
sk
);
release_sock
(
sk
);
}
...
...
net/ipv4/tcp_input.c
View file @
00e99d41
This diff is collapsed.
Click to expand it.
net/ipv4/tcp_ipv4.c
View file @
00e99d41
...
...
@@ -346,7 +346,6 @@ void tcp_v4_err(struct sk_buff *skb, unsigned char *dp)
struct
tcphdr
*
th
=
(
struct
tcphdr
*
)(
dp
+
(
iph
->
ihl
<<
2
));
int
type
=
skb
->
h
.
icmph
->
type
;
int
code
=
skb
->
h
.
icmph
->
code
;
struct
tcp_opt
*
tp
;
struct
sock
*
sk
;
sk
=
get_sock
(
&
tcp_prot
,
th
->
source
,
iph
->
daddr
,
th
->
dest
,
iph
->
saddr
);
...
...
@@ -356,19 +355,12 @@ void tcp_v4_err(struct sk_buff *skb, unsigned char *dp)
if
(
type
==
ICMP_SOURCE_QUENCH
)
{
/*
* FIXME:
* Follow BSD for now and just reduce cong_window to 1 again.
* It is possible that we just want to reduce the
* window by 1/2, or that we want to reduce ssthresh by 1/2
* here as well.
*/
tp
=
&
sk
->
tp_pinfo
.
af_tcp
;
struct
tcp_opt
*
tp
=
&
sk
->
tp_pinfo
.
af_tcp
;
sk
->
cong_window
=
1
;
sk
->
ssthresh
=
max
(
sk
->
cong_window
>>
1
,
2
);
sk
->
cong_window
=
sk
->
ssthresh
+
3
;
tp
->
high_seq
=
tp
->
snd_nxt
;
return
;
}
...
...
@@ -629,10 +621,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb, void *ptr, __u32 i
/* If the socket is dead, don't accept the connection. */
if
(
sk
->
dead
)
{
if
(
sk
->
debug
)
{
printk
(
"Reset on %p: Connect on dead socket.
\n
"
,
sk
);
}
SOCK_DEBUG
(
sk
,
"Reset on %p: Connect on dead socket.
\n
"
,
sk
);
tcp_statistics
.
TcpAttemptFails
++
;
return
-
ENOTCONN
;
}
...
...
@@ -1229,10 +1218,3 @@ struct proto tcp_prot = {
0
,
0
,
NULL
};
/*
* Local variables:
* compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -pipe -m486 -DCPU=486 -c -o tcp_ipv4.o tcp_ipv4.c"
* c-file-style: "Linux"
* End:
*/
net/ipv4/tcp_output.c
View file @
00e99d41
...
...
@@ -377,7 +377,7 @@ void tcp_write_xmit(struct sock *sk)
* c) not retransmiting [Nagle]
*/
start_bh_atomic
(
);
lock_sock
(
sk
);
rcv_wnd
=
htons
(
tcp_select_window
(
sk
));
...
...
@@ -456,7 +456,7 @@ void tcp_write_xmit(struct sock *sk)
tcp_reset_xmit_timer
(
sk
,
TIME_RETRANS
,
tp
->
rto
);
}
end_bh_atomic
(
);
release_sock
(
sk
);
}
...
...
@@ -637,7 +637,7 @@ void tcp_do_retransmit(struct sock *sk, int all)
int
ct
=
0
;
struct
tcp_opt
*
tp
=
&
(
sk
->
tp_pinfo
.
af_tcp
);
start_bh_atomic
(
);
lock_sock
(
sk
);
if
(
tp
->
retrans_head
==
NULL
)
tp
->
retrans_head
=
skb_peek
(
&
sk
->
write_queue
);
...
...
@@ -693,9 +693,7 @@ void tcp_do_retransmit(struct sock *sk, int all)
break
;
}
if
(
sk
->
debug
)
printk
(
"retransmit sending
\n
"
);
SOCK_DEBUG
(
sk
,
"retransmit sending
\n
"
);
/*
* update ack and window
*/
...
...
@@ -705,13 +703,13 @@ void tcp_do_retransmit(struct sock *sk, int all)
size
=
skb
->
tail
-
(
unsigned
char
*
)
th
;
tp
->
af_specific
->
send_check
(
sk
,
th
,
size
,
skb
);
skb
->
when
=
jiffies
;
buff
=
skb_clone
(
skb
,
GFP_ATOMIC
);
skb_set_owner_w
(
buff
,
sk
);
clear_delayed_acks
(
sk
);
tp
->
af_specific
->
queue_xmit
(
buff
);
/*
...
...
@@ -722,14 +720,8 @@ void tcp_do_retransmit(struct sock *sk, int all)
sk
->
prot
->
retransmits
++
;
tcp_statistics
.
TcpRetransSegs
++
;
/*
* Record the high sequence number to help avoid doing
* to much fast retransmission.
*/
tp
->
high_seq
=
tp
->
snd_nxt
;
if
(
sk
->
retransmits
)
tp
->
high_seq
=
tp
->
snd_nxt
;
/*
* Only one retransmit requested.
*/
...
...
@@ -756,7 +748,7 @@ void tcp_do_retransmit(struct sock *sk, int all)
}
}
end_bh_atomic
(
);
release_sock
(
sk
);
}
/*
...
...
@@ -1035,12 +1027,8 @@ void tcp_send_ack(struct sock *sk)
tp
->
af_specific
->
send_check
(
sk
,
th
,
sizeof
(
struct
tcphdr
),
buff
);
if
(
sk
->
debug
)
printk
(
"
\r
tcp_send_ack: seq %x ack %x
\n
"
,
tp
->
snd_nxt
,
tp
->
rcv_nxt
);
SOCK_DEBUG
(
sk
,
"
\r
tcp_send_ack: seq %x ack %x
\n
"
,
tp
->
snd_nxt
,
tp
->
rcv_nxt
);
tp
->
af_specific
->
queue_xmit
(
buff
);
tcp_statistics
.
TcpOutSegs
++
;
}
...
...
net/ipv6/tcp_ipv6.c
View file @
00e99d41
...
...
@@ -477,10 +477,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb, void *ptr,
/* If the socket is dead, don't accept the connection. */
if
(
sk
->
dead
)
{
if
(
sk
->
debug
)
{
printk
(
"Reset on %p: Connect on dead socket.
\n
"
,
sk
);
}
SOCK_DEBUG
(
sk
,
"Reset on %p: Connect on dead socket.
\n
"
,
sk
);
tcp_statistics
.
TcpAttemptFails
++
;
return
-
ENOTCONN
;
}
...
...
net/ipx/af_ipx.c
View file @
00e99d41
...
...
@@ -1895,9 +1895,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
sk
->
protinfo
.
af_ipx
.
node
,
sk
->
protinfo
.
af_ipx
.
port
)
!=
NULL
)
{
if
(
sk
->
debug
)
printk
(
"IPX: bind failed because port %X in"
" use.
\n
"
,
(
int
)
addr
->
sipx_port
);
SOCK_DEBUG
(
sk
,
"IPX: bind failed because port %X in use.
\n
"
,
(
int
)
addr
->
sipx_port
);
return
-
EADDRINUSE
;
}
}
...
...
@@ -1912,9 +1910,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
IPX_NODE_LEN
);
if
(
ipxitf_find_socket
(
intrfc
,
addr
->
sipx_port
)
!=
NULL
)
{
if
(
sk
->
debug
)
printk
(
"IPX: bind failed because port %X in"
" use.
\n
"
,
(
int
)
addr
->
sipx_port
);
SOCK_DEBUG
(
sk
,
"IPX: bind failed because port %X in use.
\n
"
,
(
int
)
addr
->
sipx_port
);
return
-
EADDRINUSE
;
}
}
...
...
@@ -1925,9 +1921,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
an interface routed to IPX with the ipx routing ioctl() */
if
(
ipxitf_find_socket
(
intrfc
,
addr
->
sipx_port
)
!=
NULL
)
{
if
(
sk
->
debug
)
printk
(
"IPX: bind failed because port %X in use.
\n
"
,
(
int
)
addr
->
sipx_port
);
SOCK_DEBUG
(
sk
,
"IPX: bind failed because port %X in use.
\n
"
,
(
int
)
addr
->
sipx_port
);
return
-
EADDRINUSE
;
}
...
...
@@ -1935,8 +1929,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
ipxitf_insert_socket
(
intrfc
,
sk
);
sk
->
zapped
=
0
;
if
(
sk
->
debug
)
printk
(
"IPX: socket is bound.
\n
"
);
SOCK_DEBUG
(
sk
,
"IPX: socket is bound.
\n
"
);
return
0
;
}
...
...
net/netbeui/netbeui.c
View file @
00e99d41
...
...
@@ -510,10 +510,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
}
/* Build a packet */
if
(
sk
->
debug
)
printk
(
"SK %p: Got address.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: Got address.
\n
"
,
sk
);
size
=
sizeof
(
struct
ddpehdr
)
+
len
+
nb_dl
->
header_length
;
/* For headers */
if
(
usat
->
sat_addr
.
s_net
!=
0
||
usat
->
sat_addr
.
s_node
==
ATADDR_ANYNODE
)
...
...
@@ -533,12 +530,8 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
return
-
ENETUNREACH
;
dev
=
rt
->
dev
;
}
if
(
sk
->
debug
)
printk
(
"SK %p: Size needed %d, device %s
\n
"
,
sk
,
size
,
dev
->
name
);
SOCK_DEBUG
(
sk
,
"SK %p: Size needed %d, device %s
\n
"
,
sk
,
size
,
dev
->
name
);
size
+=
dev
->
hard_header_len
;
skb
=
sock_alloc_send_skb
(
sk
,
size
,
0
,
0
,
&
err
);
if
(
skb
==
NULL
)
return
err
;
...
...
@@ -548,12 +541,8 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
skb
->
arp
=
1
;
skb_reserve
(
skb
,
nb_dl
->
header_length
);
skb_reserve
(
skb
,
dev
->
hard_header_len
);
skb
->
dev
=
dev
;
if
(
sk
->
debug
)
printk
(
"SK %p: Begin build.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: Begin build.
\n
"
,
sk
);
ddp
=
(
struct
ddpehdr
*
)
skb_put
(
skb
,
sizeof
(
struct
ddpehdr
));
ddp
->
deh_pad
=
0
;
ddp
->
deh_hops
=
0
;
...
...
@@ -571,10 +560,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
ddp
->
deh_snode
=
sk
->
protinfo
.
af_at
.
src_node
;
ddp
->
deh_dport
=
usat
->
sat_port
;
ddp
->
deh_sport
=
sk
->
protinfo
.
af_at
.
src_port
;
if
(
sk
->
debug
)
printk
(
"SK %p: Copy user data (%d bytes).
\n
"
,
sk
,
len
);
SOCK_DEBUG
(
sk
,
"SK %p: Copy user data (%d bytes).
\n
"
,
sk
,
len
);
err
=
memcpy_fromiovec
(
skb_put
(
skb
,
len
),
msg
->
msg_iov
,
len
);
if
(
err
)
{
...
...
@@ -610,8 +596,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
if
(
skb2
)
{
loopback
=
1
;
if
(
sk
->
debug
)
printk
(
"SK %p: send out(copy).
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: send out(copy).
\n
"
,
sk
);
if
(
aarp_send_ddp
(
dev
,
skb2
,
&
usat
->
sat_addr
,
NULL
)
==-
1
)
kfree_skb
(
skb2
,
FREE_WRITE
);
/* else queued/sent above in the aarp queue */
...
...
@@ -621,8 +606,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
if
((
dev
->
flags
&
IFF_LOOPBACK
)
||
loopback
)
{
if
(
sk
->
debug
)
printk
(
"SK %p: Loop back.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: Loop back.
\n
"
,
sk
);
/* loop back */
atomic_sub
(
skb
->
truesize
,
&
sk
->
wmem_alloc
);
nb_dl
->
datalink_header
(
nb_dl
,
skb
,
dev
->
dev_addr
);
...
...
@@ -635,9 +619,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
}
else
{
if
(
sk
->
debug
)
printk
(
"SK %p: send out.
\n
"
,
sk
);
SOCK_DEBUG
(
sk
,
"SK %p: send out.
\n
"
,
sk
);
if
(
rt
->
flags
&
RTF_GATEWAY
)
{
gsat
.
sat_addr
=
rt
->
gateway
;
usat
=
&
gsat
;
...
...
@@ -647,8 +629,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
kfree_skb
(
skb
,
FREE_WRITE
);
/* else queued/sent above in the aarp queue */
}
if
(
sk
->
debug
)
printk
(
"SK %p: Done write (%d).
\n
"
,
sk
,
len
);
SOCK_DEBUG
(
sk
,
"SK %p: Done write (%d).
\n
"
,
sk
,
len
);
return
len
;
}
...
...
net/netrom/af_netrom.c
View file @
00e99d41
...
...
@@ -735,8 +735,7 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
return
-
EINVAL
;
if
((
dev
=
nr_dev_get
(
&
addr
->
fsa_ax25
.
sax25_call
))
==
NULL
)
{
if
(
sk
->
debug
)
printk
(
"NET/ROM: bind failed: invalid node callsign
\n
"
);
SOCK_DEBUG
(
sk
,
"NET/ROM: bind failed: invalid node callsign
\n
"
);
return
-
EADDRNOTAVAIL
;
}
...
...
@@ -765,10 +764,7 @@ static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
nr_insert_socket
(
sk
);
sk
->
zapped
=
0
;
if
(
sk
->
debug
)
printk
(
"NET/ROM: socket is bound
\n
"
);
SOCK_DEBUG
(
sk
,
"NET/ROM: socket is bound
\n
"
);
return
0
;
}
...
...
@@ -1105,14 +1101,10 @@ static int nr_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct s
sax
.
sax25_family
=
AF_NETROM
;
sax
.
sax25_call
=
sk
->
protinfo
.
nr
->
dest_addr
;
}
if
(
sk
->
debug
)
printk
(
"NET/ROM: sendto: Addresses built.
\n
"
);
SOCK_DEBUG
(
sk
,
"NET/ROM: sendto: Addresses built.
\n
"
);
/* Build a packet */
if
(
sk
->
debug
)
printk
(
"NET/ROM: sendto: building packet.
\n
"
);
SOCK_DEBUG
(
sk
,
"NET/ROM: sendto: building packet.
\n
"
);
size
=
len
+
AX25_BPQ_HEADER_LEN
+
AX25_MAX_HEADER_LEN
+
NR_NETWORK_LEN
+
NR_TRANSPORT_LEN
;
if
((
skb
=
sock_alloc_send_skb
(
sk
,
size
,
0
,
msg
->
msg_flags
&
MSG_DONTWAIT
,
&
err
))
==
NULL
)
...
...
@@ -1127,9 +1119,7 @@ static int nr_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct s
*/
asmptr
=
skb_push
(
skb
,
NR_TRANSPORT_LEN
);
if
(
sk
->
debug
)
printk
(
"Building NET/ROM Header.
\n
"
);
SOCK_DEBUG
(
sk
,
"Building NET/ROM Header.
\n
"
);
/* Build a NET/ROM Transport header */
...
...
@@ -1138,9 +1128,7 @@ static int nr_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct s
*
asmptr
++
=
0
;
/* To be filled in later */
*
asmptr
++
=
0
;
/* Ditto */
*
asmptr
++
=
NR_INFO
;
if
(
sk
->
debug
)
printk
(
"Built header.
\n
"
);
SOCK_DEBUG
(
sk
,
"Built header.
\n
"
);
/*
* Put the data on the end
...
...
@@ -1149,15 +1137,11 @@ static int nr_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct s
skb
->
h
.
raw
=
skb_put
(
skb
,
len
);
asmptr
=
skb
->
h
.
raw
;
if
(
sk
->
debug
)
printk
(
"NET/ROM: Appending user data
\n
"
);
SOCK_DEBUG
(
sk
,
"NET/ROM: Appending user data
\n
"
);
/* User data follows immediately after the NET/ROM transport header */
memcpy_fromiovec
(
asmptr
,
msg
->
msg_iov
,
len
);
if
(
sk
->
debug
)
printk
(
"NET/ROM: Transmitting buffer
\n
"
);
SOCK_DEBUG
(
sk
,
"NET/ROM: Transmitting buffer
\n
"
);
if
(
sk
->
state
!=
TCP_ESTABLISHED
)
{
kfree_skb
(
skb
,
FREE_WRITE
);
...
...
net/rose/af_rose.c
View file @
00e99d41
...
...
@@ -797,8 +797,7 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
return
-
EINVAL
;
if
((
dev
=
rose_dev_get
(
&
addr
->
srose_addr
))
==
NULL
)
{
if
(
sk
->
debug
)
printk
(
"Rose: bind failed: invalid address
\n
"
);
SOCK_DEBUG
(
sk
,
"Rose: bind failed: invalid address
\n
"
);
return
-
EADDRNOTAVAIL
;
}
...
...
@@ -822,10 +821,7 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
rose_insert_socket
(
sk
);
sk
->
zapped
=
0
;
if
(
sk
->
debug
)
printk
(
"Rose: socket is bound
\n
"
);
SOCK_DEBUG
(
sk
,
"Rose: socket is bound
\n
"
);
return
0
;
}
...
...
@@ -1134,14 +1130,10 @@ static int rose_sendmsg(struct socket *sock, struct msghdr *msg, int len,
srose
.
srose_digi
=
sk
->
protinfo
.
rose
->
dest_digi
;
}
}
if
(
sk
->
debug
)
printk
(
"Rose: sendto: Addresses built.
\n
"
);
SOCK_DEBUG
(
sk
,
"Rose: sendto: Addresses built.
\n
"
);
/* Build a packet */
if
(
sk
->
debug
)
printk
(
"Rose: sendto: building packet.
\n
"
);
SOCK_DEBUG
(
sk
,
"Rose: sendto: building packet.
\n
"
);
size
=
len
+
AX25_BPQ_HEADER_LEN
+
AX25_MAX_HEADER_LEN
+
ROSE_MIN_LEN
;
if
((
skb
=
sock_alloc_send_skb
(
sk
,
size
,
0
,
msg
->
msg_flags
&
MSG_DONTWAIT
,
&
err
))
==
NULL
)
...
...
@@ -1156,18 +1148,14 @@ static int rose_sendmsg(struct socket *sock, struct msghdr *msg, int len,
*/
asmptr
=
skb_push
(
skb
,
ROSE_MIN_LEN
);
if
(
sk
->
debug
)
printk
(
"Building Rose Header.
\n
"
);
SOCK_DEBUG
(
sk
,
"Building Rose Header.
\n
"
);
/* Build a Rose Transport header */
*
asmptr
++
=
((
sk
->
protinfo
.
rose
->
lci
>>
8
)
&
0x0F
)
|
ROSE_GFI
;
*
asmptr
++
=
(
sk
->
protinfo
.
rose
->
lci
>>
0
)
&
0xFF
;
*
asmptr
++
=
ROSE_DATA
;
if
(
sk
->
debug
)
printk
(
"Built header.
\n
"
);
SOCK_DEBUG
(
sk
,
"Built header.
\n
"
);
/*
* Put the data on the end
...
...
@@ -1176,15 +1164,11 @@ static int rose_sendmsg(struct socket *sock, struct msghdr *msg, int len,
skb
->
h
.
raw
=
skb_put
(
skb
,
len
);
asmptr
=
skb
->
h
.
raw
;
if
(
sk
->
debug
)
printk
(
"Rose: Appending user data
\n
"
);
SOCK_DEBUG
(
sk
,
"Rose: Appending user data
\n
"
);
/* User data follows immediately after the Rose transport header */
memcpy_fromiovec
(
asmptr
,
msg
->
msg_iov
,
len
);
if
(
sk
->
debug
)
printk
(
"Rose: Transmitting buffer
\n
"
);
SOCK_DEBUG
(
sk
,
"Rose: Transmitting buffer
\n
"
);
if
(
sk
->
state
!=
TCP_ESTABLISHED
)
{
kfree_skb
(
skb
,
FREE_WRITE
);
...
...
net/x25/af_x25.c
View file @
00e99d41
...
...
@@ -652,10 +652,7 @@ static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
x25_insert_socket
(
sk
);
sk
->
zapped
=
0
;
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_bind: socket is bound
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_bind: socket is bound
\n
"
);
return
0
;
}
...
...
@@ -937,14 +934,10 @@ static int x25_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct
sx25
.
sx25_family
=
AF_X25
;
sx25
.
sx25_addr
=
sk
->
protinfo
.
x25
->
dest_addr
;
}
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_sendmsg: sendto: Addresses built.
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_sendmsg: sendto: Addresses built.
\n
"
);
/* Build a packet */
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_sendmsg: sendto: building packet.
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_sendmsg: sendto: building packet.
\n
"
);
if
((
msg
->
msg_flags
&
MSG_OOB
)
&&
len
>
32
)
len
=
32
;
...
...
@@ -958,9 +951,7 @@ static int x25_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct
/*
* Put the data on the end
*/
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_sendmsg: Copying user data
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_sendmsg: Copying user data
\n
"
);
skb
->
h
.
raw
=
skb_put
(
skb
,
len
);
asmptr
=
skb
->
h
.
raw
;
...
...
@@ -978,9 +969,7 @@ static int x25_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct
/*
* Push down the X.25 header
*/
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_sendmsg: Building X.25 Header.
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_sendmsg: Building X.25 Header.
\n
"
);
if
(
msg
->
msg_flags
&
MSG_OOB
)
{
if
(
sk
->
protinfo
.
x25
->
neighbour
->
extended
)
{
asmptr
=
skb_push
(
skb
,
X25_STD_MIN_LEN
);
...
...
@@ -1012,12 +1001,8 @@ static int x25_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct
if
(
qbit
)
skb
->
data
[
0
]
|=
X25_Q_BIT
;
}
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_sendmsg: Built header.
\n
"
);
if
(
sk
->
debug
)
printk
(
KERN_DEBUG
"x25_sendmsg: Transmitting buffer
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_sendmsg: Built header.
\n
"
);
SOCK_DEBUG
(
sk
,
"x25_sendmsg: Transmitting buffer
\n
"
);
if
(
sk
->
state
!=
TCP_ESTABLISHED
)
{
kfree_skb
(
skb
,
FREE_WRITE
);
...
...
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