diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/af_inet.c | 22 | ||||
-rw-r--r-- | net/ipv4/ipconfig.c | 5 | ||||
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 3 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 8 | ||||
-rw-r--r-- | net/ipv4/tcp_timer.c | 3 |
5 files changed, 25 insertions, 16 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 969fee200..b7512a1c9 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -5,7 +5,7 @@ * * PF_INET protocol family socket handler. * - * Version: $Id: af_inet.c,v 1.106 2000/02/04 21:04:06 davem Exp $ + * Version: $Id: af_inet.c,v 1.107 2000/02/18 16:47:20 davem Exp $ * * Authors: Ross Biro, <bir7@leland.Stanford.Edu> * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> @@ -103,9 +103,7 @@ #ifdef CONFIG_IP_MROUTE #include <linux/mroute.h> #endif -#ifdef CONFIG_BRIDGE -#include <net/br.h> -#endif +#include <linux/if_bridge.h> #ifdef CONFIG_KMOD #include <linux/kmod.h> #endif @@ -137,6 +135,8 @@ extern int dlci_ioctl(unsigned int, void*); int (*dlci_ioctl_hook)(unsigned int, void *) = NULL; #endif +int (*br_ioctl_hook)(unsigned long) = NULL; + /* New destruction routine */ void inet_sock_destruct(struct sock *sk) @@ -837,14 +837,14 @@ static int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) return(devinet_ioctl(cmd,(void *) arg)); case SIOCGIFBR: case SIOCSIFBR: -#ifdef CONFIG_BRIDGE - lock_kernel(); - err = br_ioctl(cmd,(void *) arg); - unlock_kernel(); - return err; -#else +#ifdef CONFIG_KMOD + if (br_ioctl_hook == NULL) + request_module("bridge"); +#endif + if (br_ioctl_hook != NULL) + return br_ioctl_hook(arg); + return -ENOPKG; -#endif case SIOCADDDLCI: case SIOCDELDLCI: diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index 82e443d4d..bcdd71354 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c @@ -821,7 +821,7 @@ static int __init ic_dynamic(void) * IP Autoconfig dispatcher. */ -int __init ip_auto_config(void) +static int __init ip_auto_config(void) { if (!ic_enable) return 0; @@ -879,6 +879,9 @@ int __init ip_auto_config(void) return 0; } +module_init(ip_auto_config); + + /* * Decode any IP configuration options in the "ip=" or "nfsaddrs=" kernel * command line parameter. It consists of option fields separated by colons in diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 470f47e7e..25a71d5f0 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -5,7 +5,7 @@ * * Implementation of the Transmission Control Protocol(TCP). * - * Version: $Id: tcp_ipv4.c,v 1.199 2000/02/08 21:27:17 davem Exp $ + * Version: $Id: tcp_ipv4.c,v 1.200 2000/02/11 22:27:26 davem Exp $ * * IPv4 specific functions * @@ -51,6 +51,7 @@ #include <linux/types.h> #include <linux/fcntl.h> #include <linux/random.h> +#include <linux/cache.h> #include <linux/init.h> #include <net/icmp.h> diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index f3f1d0bcf..37ab925bf 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -857,11 +857,15 @@ void tcp_send_fin(struct sock *sk) } } else { /* Socket is locked, keep trying until memory is available. */ - do { + for (;;) { skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15, 1, GFP_KERNEL); - } while (skb == NULL); + if (skb) + break; + current->policy |= SCHED_YIELD; + schedule(); + } /* Reserve space for headers and prepare control bits. */ skb_reserve(skb, MAX_TCP_HEADER); diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index 33eea733d..6b3695c3e 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -5,7 +5,7 @@ * * Implementation of the Transmission Control Protocol(TCP). * - * Version: $Id: tcp_timer.c,v 1.73 2000/02/09 11:16:42 davem Exp $ + * Version: $Id: tcp_timer.c,v 1.74 2000/02/14 20:56:30 davem Exp $ * * Authors: Ross Biro, <bir7@leland.Stanford.Edu> * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> @@ -659,6 +659,7 @@ static void tcp_synack_timer(struct sock *sk) if (req->retrans == 0) lopt->qlen_young--; tcp_openreq_free(req); + continue; } reqp = &req->dl_next; } |