Currently all network protocols need to call dev_ioctl as the default fallback in their ioctl implementations. This patch adds a fallback to dev_ioctl to sock_ioctl if the protocol returned -ENOIOCTLCMD. This way all the procotol ioctl handlers can be simplified and we don't need to export dev_ioctl.
Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]> Index: linux-2.6/net/appletalk/ddp.c =================================================================== --- linux-2.6.orig/net/appletalk/ddp.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/appletalk/ddp.c 2005-12-25 17:16:35.000000000 +0100 @@ -1763,7 +1763,7 @@ */ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { - int rc = -EINVAL; + int rc = -ENOIOCTLCMD; struct sock *sk = sock->sk; void __user *argp = (void __user *)arg; @@ -1813,23 +1813,6 @@ rc = atif_ioctl(cmd, argp); rtnl_unlock(); break; - /* Physical layer ioctl calls */ - case SIOCSIFLINK: - case SIOCGIFHWADDR: - case SIOCSIFHWADDR: - case SIOCGIFFLAGS: - case SIOCSIFFLAGS: - case SIOCGIFTXQLEN: - case SIOCSIFTXQLEN: - case SIOCGIFMTU: - case SIOCGIFCONF: - case SIOCADDMULTI: - case SIOCDELMULTI: - case SIOCGIFCOUNT: - case SIOCGIFINDEX: - case SIOCGIFNAME: - rc = dev_ioctl(cmd, argp); - break; } return rc; Index: linux-2.6/net/packet/af_packet.c =================================================================== --- linux-2.6.orig/net/packet/af_packet.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/packet/af_packet.c 2005-12-25 16:37:03.000000000 +0100 @@ -1521,7 +1521,7 @@ #endif default: - return dev_ioctl(cmd, (void __user *)arg); + return -ENOIOCTLCMD; } return 0; } Index: linux-2.6/net/rose/af_rose.c =================================================================== --- linux-2.6.orig/net/rose/af_rose.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/rose/af_rose.c 2005-12-25 18:18:20.000000000 +0100 @@ -1320,7 +1320,7 @@ return 0; default: - return dev_ioctl(cmd, argp); + return -ENOIOCTLCMD; } return 0; Index: linux-2.6/net/socket.c =================================================================== --- linux-2.6.orig/net/socket.c 2005-12-25 14:13:26.000000000 +0100 +++ linux-2.6/net/socket.c 2005-12-25 15:27:30.000000000 +0100 @@ -904,6 +904,13 @@ break; default: err = sock->ops->ioctl(sock, cmd, arg); + + /* + * If this ioctl is unknown try to hand it down + * to the NIC driver. + */ + if (err == -ENOIOCTLCMD) + err = dev_ioctl(cmd, argp); break; } return err; Index: linux-2.6/net/unix/af_unix.c =================================================================== --- linux-2.6.orig/net/unix/af_unix.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/unix/af_unix.c 2005-12-25 16:38:52.000000000 +0100 @@ -1860,7 +1860,7 @@ } default: - err = dev_ioctl(cmd, (void __user *)arg); + err = -ENOIOCTLCMD; break; } return err; Index: linux-2.6/net/wanrouter/af_wanpipe.c =================================================================== --- linux-2.6.orig/net/wanrouter/af_wanpipe.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/wanrouter/af_wanpipe.c 2005-12-25 14:13:42.000000000 +0100 @@ -1839,7 +1839,7 @@ #endif default: - return dev_ioctl(cmd,(void __user *) arg); + return ?ENOIOCTLCMD; } /*NOTREACHED*/ } Index: linux-2.6/net/x25/af_x25.c =================================================================== --- linux-2.6.orig/net/x25/af_x25.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/x25/af_x25.c 2005-12-25 18:18:32.000000000 +0100 @@ -1378,7 +1378,7 @@ } default: - rc = dev_ioctl(cmd, argp); + rc = -ENOIOCTLCMD; break; } Index: linux-2.6/net/ax25/af_ax25.c =================================================================== --- linux-2.6.orig/net/ax25/af_ax25.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/ax25/af_ax25.c 2005-12-25 17:17:50.000000000 +0100 @@ -1827,7 +1827,7 @@ break; default: - res = dev_ioctl(cmd, argp); + res = -ENOIOCTLCMD; break; } release_sock(sk); Index: linux-2.6/net/core/dev.c =================================================================== --- linux-2.6.orig/net/core/dev.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/core/dev.c 2005-12-25 14:13:42.000000000 +0100 @@ -3276,7 +3276,6 @@ EXPORT_SYMBOL(dev_get_by_flags); EXPORT_SYMBOL(dev_get_by_index); EXPORT_SYMBOL(dev_get_by_name); -EXPORT_SYMBOL(dev_ioctl); EXPORT_SYMBOL(dev_open); EXPORT_SYMBOL(dev_queue_xmit); EXPORT_SYMBOL(dev_remove_pack); Index: linux-2.6/net/decnet/af_decnet.c =================================================================== --- linux-2.6.orig/net/decnet/af_decnet.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/decnet/af_decnet.c 2005-12-25 17:22:56.000000000 +0100 @@ -1252,7 +1252,7 @@ break; default: - err = dev_ioctl(cmd, (void __user *)arg); + err = -ENOIOCTLCMD; break; } Index: linux-2.6/net/econet/af_econet.c =================================================================== --- linux-2.6.orig/net/econet/af_econet.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/econet/af_econet.c 2005-12-25 17:24:48.000000000 +0100 @@ -686,7 +686,7 @@ break; default: - return dev_ioctl(cmd, argp); + return -ENOIOCTLCMD; } /*NOTREACHED*/ return 0; Index: linux-2.6/net/ipv4/af_inet.c =================================================================== --- linux-2.6.orig/net/ipv4/af_inet.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/ipv4/af_inet.c 2005-12-25 16:35:15.000000000 +0100 @@ -775,10 +775,10 @@ err = devinet_ioctl(cmd, (void __user *)arg); break; default: - if (!sk->sk_prot->ioctl || - (err = sk->sk_prot->ioctl(sk, cmd, arg)) == - -ENOIOCTLCMD) - err = dev_ioctl(cmd, (void __user *)arg); + if (sk->sk_prot->ioctl) + err = sk->sk_prot->ioctl(sk, cmd, arg); + else + err = -ENOIOCTLCMD; break; } return err; Index: linux-2.6/net/ipv6/af_inet6.c =================================================================== --- linux-2.6.orig/net/ipv6/af_inet6.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/ipv6/af_inet6.c 2005-12-25 18:17:11.000000000 +0100 @@ -431,7 +431,6 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { struct sock *sk = sock->sk; - int err = -EINVAL; switch(cmd) { @@ -450,10 +449,9 @@ case SIOCSIFDSTADDR: return addrconf_set_dstaddr((void __user *) arg); default: - if (!sk->sk_prot->ioctl || - (err = sk->sk_prot->ioctl(sk, cmd, arg)) == -ENOIOCTLCMD) - return(dev_ioctl(cmd,(void __user *) arg)); - return err; + if (!sk->sk_prot->ioctl) + return -ENOIOCTLCMD; + return sk->sk_prot->ioctl(sk, cmd, arg); } /*NOTREACHED*/ return(0); Index: linux-2.6/net/ipx/af_ipx.c =================================================================== --- linux-2.6.orig/net/ipx/af_ipx.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/ipx/af_ipx.c 2005-12-25 18:17:23.000000000 +0100 @@ -1884,7 +1884,7 @@ rc = -EINVAL; break; default: - rc = dev_ioctl(cmd, argp); + rc = -ENOIOCTLCMD; break; } Index: linux-2.6/net/irda/af_irda.c =================================================================== --- linux-2.6.orig/net/irda/af_irda.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/irda/af_irda.c 2005-12-25 18:17:37.000000000 +0100 @@ -1821,7 +1821,7 @@ return -EINVAL; default: IRDA_DEBUG(1, "%s(), doing device ioctl!\n", __FUNCTION__); - return dev_ioctl(cmd, (void __user *) arg); + return -ENOIOCTLCMD; } /*NOTREACHED*/ Index: linux-2.6/net/llc/af_llc.c =================================================================== --- linux-2.6.orig/net/llc/af_llc.c 2005-12-25 14:12:07.000000000 +0100 +++ linux-2.6/net/llc/af_llc.c 2005-12-25 18:17:52.000000000 +0100 @@ -960,7 +960,7 @@ static int llc_ui_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { - return dev_ioctl(cmd, (void __user *)arg); + return -ENOIOCTLCMD; } /** Index: linux-2.6/net/netrom/af_netrom.c =================================================================== --- linux-2.6.orig/net/netrom/af_netrom.c 2005-12-25 14:13:41.000000000 +0100 +++ linux-2.6/net/netrom/af_netrom.c 2005-12-25 18:18:07.000000000 +0100 @@ -1215,7 +1215,7 @@ return nr_rt_ioctl(cmd, argp); default: - return dev_ioctl(cmd, argp); + return -ENOIOCTLCMD; } return 0; - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html