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,