diff -urN linux/drivers/scsi/hosts.c linux-2.3.16-work/drivers/scsi/hosts.c
--- linux/drivers/scsi/hosts.c	Mon Aug 30 18:43:25 1999
+++ linux-2.3.16-work/drivers/scsi/hosts.c	Mon Sep  6 12:34:51 1999
@@ -758,11 +758,11 @@
  * Why is this a separate function?  Because the kernel_thread code
  * effectively does a fork, and there is a builtin exit() call when
  * the child returns.   The difficulty is that scsi_init() is
- * marked __initfunc(), which means the memory is unmapped after bootup
+ * marked __init, which means the memory is unmapped after bootup
  * is complete, which means that the thread's exit() call gets wiped.
  *
  * The lesson is to *NEVER*, *NEVER* call kernel_thread() from an
- * __initfunc() function, if that function could ever return.
+ * __init function, if that function could ever return.
  */
 static void launch_error_handler_thread(struct Scsi_Host * shpnt)
 {
diff -urN linux/net/appletalk/ddp.c linux-2.3.16-work/net/appletalk/ddp.c
--- linux/net/appletalk/ddp.c	Wed Aug 25 22:45:50 1999
+++ linux-2.3.16-work/net/appletalk/ddp.c	Mon Sep  6 13:00:48 1999
@@ -1360,13 +1360,6 @@
 	return (0);
 }
 
-/*
- * Not relevant
- */
-static int atalk_accept(struct socket *sock, struct socket *newsock, int flags)
-{
-	return (-EOPNOTSUPP);
-}
 
 /*
  * Find the name of an AppleTalk socket. Just copy the right
@@ -1918,10 +1911,6 @@
 	return (err ? err : (copied));
 }
 
-static int atalk_shutdown(struct socket *sk,int how)
-{
-	return (-EOPNOTSUPP);
-}
 
 /*
  * AppleTalk ioctl calls.
@@ -2029,12 +2018,12 @@
 	atalk_bind,
 	atalk_connect,
 	sock_no_socketpair,
-	atalk_accept,
+	sock_no_accept,
 	atalk_getname,
 	datagram_poll,
 	atalk_ioctl,
 	sock_no_listen,
-	atalk_shutdown,
+	sock_no_shutdown,
 	sock_no_setsockopt,
 	sock_no_getsockopt,
 	sock_no_fcntl,
diff -urN linux/net/atm/pvc.c linux-2.3.16-work/net/atm/pvc.c
--- linux/net/atm/pvc.c	Thu Aug 26 22:13:59 1999
+++ linux-2.3.16-work/net/atm/pvc.c	Mon Sep  6 12:43:46 1999
@@ -62,18 +62,6 @@
 }
 
 
-static int pvc_listen(struct socket *sock,int backlog)
-{
-	return -EOPNOTSUPP;
-}
-
-
-static int pvc_accept(struct socket *sock,struct socket *newsock,int flags)
-{
-	return -EOPNOTSUPP;
-}
-
-
 static int pvc_getname(struct socket *sock,struct sockaddr *sockaddr,
     int *sockaddr_len,int peer)
 {
@@ -100,11 +88,11 @@
 	pvc_bind,
 	pvc_connect,
 	sock_no_socketpair,
-	pvc_accept,
+	sock_no_accept,
 	pvc_getname,
 	atm_poll,
 	atm_ioctl,
-	pvc_listen,
+	sock_no_listen,
 	pvc_shutdown,
 	atm_setsockopt,
 	atm_getsockopt,
diff -urN linux/net/decnet/af_decnet.c linux-2.3.16-work/net/decnet/af_decnet.c
--- linux/net/decnet/af_decnet.c	Tue Aug 31 19:23:03 1999
+++ linux-2.3.16-work/net/decnet/af_decnet.c	Mon Sep  6 13:02:51 1999
@@ -1239,9 +1239,6 @@
 	if ((sk->protinfo.dn.state != DN_O) || (sk->state == TCP_LISTEN))
 		goto out;
 
-	if (backlog > SOMAXCONN)
-		backlog = SOMAXCONN;
-
 	sk->max_ack_backlog = backlog;
 	sk->ack_backlog     = 0;
 	sk->state           = TCP_LISTEN;
diff -urN linux/net/ipv4/af_inet.c linux-2.3.16-work/net/ipv4/af_inet.c
--- linux/net/ipv4/af_inet.c	Tue Aug 31 19:30:48 1999
+++ linux-2.3.16-work/net/ipv4/af_inet.c	Mon Sep  6 13:00:01 1999
@@ -285,11 +285,6 @@
 	if (sock->state != SS_UNCONNECTED || sock->type != SOCK_STREAM)
 		return -EINVAL;
 
-	if ((unsigned) backlog == 0)	/* BSDism */
-		backlog = 1;
-	if ((unsigned) backlog > SOMAXCONN)
-		backlog = SOMAXCONN;
-
 	lock_sock(sk);
 	old_state = sk->state;
 	err = -EINVAL;
diff -urN linux/net/ipx/af_ipx.c linux-2.3.16-work/net/ipx/af_ipx.c
--- linux/net/ipx/af_ipx.c	Mon Aug 30 18:31:24 1999
+++ linux-2.3.16-work/net/ipx/af_ipx.c	Mon Sep  6 12:55:17 1999
@@ -1983,10 +1983,6 @@
 	return (0);
 }
 
-static int ipx_accept(struct socket *sock, struct socket *newsock, int flags)
-{
-	return (-EOPNOTSUPP);
-}
 
 static int ipx_getname(struct socket *sock, struct sockaddr *uaddr,
 	int *uaddr_len, int peer)
@@ -2213,13 +2209,6 @@
 	return (err);
 }
 
-/*
- * FIXME: We have to really support shutdown.
- */
-static int ipx_shutdown(struct socket *sk,int how)
-{
-	return (-EOPNOTSUPP);
-}
 
 static int ipx_ioctl(struct socket *sock,unsigned int cmd, unsigned long arg)
 {
@@ -2342,12 +2331,12 @@
 	ipx_bind,
 	ipx_connect,
 	sock_no_socketpair,
-	ipx_accept,
+	sock_no_accept,
 	ipx_getname,
 	datagram_poll,
 	ipx_ioctl,
 	sock_no_listen,
-	ipx_shutdown,
+	sock_no_shutdown, /* FIXME: We have to really support shutdown. */
 	ipx_setsockopt,
 	ipx_getsockopt,
 	sock_no_fcntl,
diff -urN linux/net/ipx/af_spx.c linux-2.3.16-work/net/ipx/af_spx.c
--- linux/net/ipx/af_spx.c	Mon Aug 23 18:01:02 1999
+++ linux-2.3.16-work/net/ipx/af_spx.c	Mon Sep  6 13:05:03 1999
@@ -113,10 +113,6 @@
 	return (0);
 }
 
-static int spx_shutdown(struct socket *sk,int how)
-{
-        return (-EOPNOTSUPP);
-}
 
 void spx_close_socket(struct sock *sk)
 {
@@ -184,10 +180,6 @@
         if(sk->zapped != 0)
                 return (-EAGAIN);
 
-        if((unsigned) backlog == 0)     /* BSDism */
-                backlog = 1;
-        if((unsigned) backlog > SOMAXCONN)
-                backlog = SOMAXCONN;
         sk->max_ack_backlog = backlog;
         if(sk->state != TCP_LISTEN)
         {
@@ -853,7 +845,7 @@
         datagram_poll,  /* this does seqpacket too */
 	spx_ioctl,
         spx_listen,
-        spx_shutdown,
+        sock_no_shutdown,
 	spx_setsockopt,
 	spx_getsockopt,
         sock_no_fcntl,
diff -urN linux/net/netrom/af_netrom.c linux-2.3.16-work/net/netrom/af_netrom.c
--- linux/net/netrom/af_netrom.c	Thu Aug 26 22:13:59 1999
+++ linux-2.3.16-work/net/netrom/af_netrom.c	Mon Sep  6 13:06:57 1999
@@ -1100,10 +1100,6 @@
 	return copied;
 }
 
-static int nr_shutdown(struct socket *sk, int how)
-{
-	return -EOPNOTSUPP;
-}
 
 static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
@@ -1255,7 +1251,7 @@
 	datagram_poll,
 	nr_ioctl,
 	nr_listen,
-	nr_shutdown,
+	sock_no_shutdown,
 	nr_setsockopt,
 	nr_getsockopt,
 	sock_no_fcntl,
diff -urN linux/net/rose/af_rose.c linux-2.3.16-work/net/rose/af_rose.c
--- linux/net/rose/af_rose.c	Thu Aug 26 22:13:59 1999
+++ linux-2.3.16-work/net/rose/af_rose.c	Mon Sep  6 12:47:05 1999
@@ -1245,10 +1245,6 @@
 	return copied;
 }
 
-static int rose_shutdown(struct socket *sk, int how)
-{
-	return -EOPNOTSUPP;
-}
 
 static int rose_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
@@ -1445,7 +1441,7 @@
 	datagram_poll,
 	rose_ioctl,
 	rose_listen,
-	rose_shutdown,
+	sock_no_shutdown,
 	rose_setsockopt,
 	rose_getsockopt,
 	sock_no_fcntl,
diff -urN linux/net/socket.c linux-2.3.16-work/net/socket.c
--- linux/net/socket.c	Mon Aug 23 19:15:53 1999
+++ linux-2.3.16-work/net/socket.c	Mon Sep  6 12:58:32 1999
@@ -42,6 +42,8 @@
  *		Andi Kleen	:	Some small cleanups, optimizations,
  *					and fixed a copy_from_user() bug.
  *		Tigran Aivazian	:	sys_send(args) calls sys_sendto(args, NULL, 0)
+ *		Tigran Aivazian	:	Made listen(2) backlog sanity checks 
+ *					protocol-independent
  *
  *
  *		This program is free software; you can redistribute it and/or
@@ -894,6 +896,10 @@
 	int err;
 	
 	if ((sock = sockfd_lookup(fd, &err)) != NULL) {
+		if ((unsigned) backlog == 0)	/* BSDism */
+			backlog = 1;
+		if ((unsigned) backlog > SOMAXCONN)
+			backlog = SOMAXCONN;
 		err=sock->ops->listen(sock, backlog);
 		sockfd_put(sock);
 	}
diff -urN linux/net/unix/af_unix.c linux-2.3.16-work/net/unix/af_unix.c
--- linux/net/unix/af_unix.c	Tue Aug 31 19:30:48 1999
+++ linux-2.3.16-work/net/unix/af_unix.c	Mon Sep  6 12:59:47 1999
@@ -414,8 +414,6 @@
 	err = -EINVAL;
 	if (!sk->protinfo.af_unix.addr)
 		goto out;			/* No listens on an unbound socket */
-	if ((unsigned) backlog > SOMAXCONN)
-		backlog = SOMAXCONN;
 	unix_state_wlock(sk);
 	if (sk->state != TCP_CLOSE && sk->state != TCP_LISTEN)
 		goto out_unlock;
diff -urN linux/net/x25/af_x25.c linux-2.3.16-work/net/x25/af_x25.c
--- linux/net/x25/af_x25.c	Mon Aug 30 18:31:24 1999
+++ linux-2.3.16-work/net/x25/af_x25.c	Mon Sep  6 12:48:27 1999
@@ -1044,10 +1044,6 @@
 	return copied;
 }
 
-static int x25_shutdown(struct socket *sk, int how)
-{
-	return -EOPNOTSUPP;
-}
 
 static int x25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
@@ -1246,7 +1242,7 @@
 	datagram_poll,
 	x25_ioctl,
 	x25_listen,
-	x25_shutdown,
+	sock_no_shutdown,
 	x25_setsockopt,
 	x25_getsockopt,
 	sock_no_fcntl,
