summaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/af_inet.c22
-rw-r--r--net/ipv4/ipconfig.c5
-rw-r--r--net/ipv4/tcp_ipv4.c3
-rw-r--r--net/ipv4/tcp_output.c8
-rw-r--r--net/ipv4/tcp_timer.c3
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;
}