netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC 08/11] remove CONFIG_KMOD from net
       [not found] <20080708170015.470877000@sipsolutions.net>
@ 2008-07-08 17:00 ` Johannes Berg
  2008-07-08 18:30   ` Adrian Bunk
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2008-07-08 17:00 UTC (permalink / raw)
  To: linux-kernel; +Cc: Rusty Russell, Christoph Hellwig, netdev

[-- Attachment #1: config-kmod-remove-net.patch --]
[-- Type: text/plain, Size: 10532 bytes --]

Some code here depends on CONFIG_KMOD to not try to load
protocol modules or similar, replace by CONFIG_MODULES
where more than just request_module depends on CONFIG_KMOD
and and also use try_then_request_module in ebtables.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: netdev@vger.kernel.org
---
 include/linux/netdevice.h       |    5 ++++-
 net/bluetooth/af_bluetooth.c    |    8 +-------
 net/bridge/netfilter/ebtables.c |   15 +++------------
 net/can/af_can.c                |    4 ++--
 net/core/dev.c                  |    2 +-
 net/core/rtnetlink.c            |    4 ++--
 net/dccp/ccid.c                 |    2 +-
 net/decnet/dn_dev.c             |    2 --
 net/ipv4/devinet.c              |    2 --
 net/ipv4/inet_diag.c            |    2 --
 net/ipv4/tcp_cong.c             |    4 ++--
 net/netfilter/nfnetlink.c       |    2 +-
 net/netlink/af_netlink.c        |    2 +-
 net/sched/act_api.c             |    2 +-
 net/sched/cls_api.c             |    2 +-
 net/sched/ematch.c              |    2 +-
 net/sched/sch_api.c             |    2 +-
 net/socket.c                    |    2 +-
 net/sunrpc/auth.c               |    2 --
 19 files changed, 23 insertions(+), 43 deletions(-)

--- everything.orig/net/bluetooth/af_bluetooth.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/bluetooth/af_bluetooth.c	2008-07-08 18:36:06.000000000 +0200
@@ -36,10 +36,7 @@
 #include <linux/init.h>
 #include <linux/poll.h>
 #include <net/sock.h>
-
-#if defined(CONFIG_KMOD)
 #include <linux/kmod.h>
-#endif
 
 #include <net/bluetooth/bluetooth.h>
 
@@ -144,11 +141,8 @@ static int bt_sock_create(struct net *ne
 	if (proto < 0 || proto >= BT_MAX_PROTO)
 		return -EINVAL;
 
-#if defined(CONFIG_KMOD)
-	if (!bt_proto[proto]) {
+	if (!bt_proto[proto])
 		request_module("bt-proto-%d", proto);
-	}
-#endif
 
 	err = -EPROTONOSUPPORT;
 
--- everything.orig/net/bridge/netfilter/ebtables.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/bridge/netfilter/ebtables.c	2008-07-08 18:36:06.000000000 +0200
@@ -288,23 +288,14 @@ find_inlist_lock_noload(struct list_head
 	return NULL;
 }
 
-#ifndef CONFIG_KMOD
-#define find_inlist_lock(h,n,p,e,m) find_inlist_lock_noload((h),(n),(e),(m))
-#else
 static void *
 find_inlist_lock(struct list_head *head, const char *name, const char *prefix,
    int *error, struct mutex *mutex)
 {
-	void *ret;
-
-	ret = find_inlist_lock_noload(head, name, error, mutex);
-	if (!ret) {
-		request_module("%s%s", prefix, name);
-		ret = find_inlist_lock_noload(head, name, error, mutex);
-	}
-	return ret;
+	return try_then_request_module(
+			find_inlist_lock_noload(head, name, error, mutex),
+			"%s%s", prefix, name);
 }
-#endif
 
 static inline struct ebt_table *
 find_table_lock(const char *name, int *error, struct mutex *mutex)
--- everything.orig/net/can/af_can.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/can/af_can.c	2008-07-08 18:36:06.000000000 +0200
@@ -128,8 +128,8 @@ static int can_create(struct net *net, s
 	if (net != &init_net)
 		return -EAFNOSUPPORT;
 
-#ifdef CONFIG_KMOD
-	/* try to load protocol module, when CONFIG_KMOD is defined */
+#ifdef CONFIG_MODULES
+	/* try to load protocol module kernel is modular */
 	if (!proto_tab[protocol]) {
 		err = request_module("can-proto-%d", protocol);
 
--- everything.orig/net/core/dev.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/core/dev.c	2008-07-08 18:36:06.000000000 +0200
@@ -4639,7 +4639,7 @@ EXPORT_SYMBOL(br_fdb_get_hook);
 EXPORT_SYMBOL(br_fdb_put_hook);
 #endif
 
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 EXPORT_SYMBOL(dev_load);
 #endif
 
--- everything.orig/net/core/rtnetlink.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/core/rtnetlink.c	2008-07-08 18:36:06.000000000 +0200
@@ -1029,7 +1029,7 @@ static int rtnl_newlink(struct sk_buff *
 	struct nlattr *linkinfo[IFLA_INFO_MAX+1];
 	int err;
 
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 replay:
 #endif
 	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
@@ -1118,7 +1118,7 @@ replay:
 			return -EOPNOTSUPP;
 
 		if (!ops) {
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 			if (kind[0]) {
 				__rtnl_unlock();
 				request_module("rtnl-link-%s", kind);
--- everything.orig/net/dccp/ccid.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/dccp/ccid.c	2008-07-08 18:36:06.000000000 +0200
@@ -154,7 +154,7 @@ struct ccid *ccid_new(unsigned char id, 
 	struct ccid *ccid = NULL;
 
 	ccids_read_lock();
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 	if (ccids[id] == NULL) {
 		/* We only try to load if in process context */
 		ccids_read_unlock();
--- everything.orig/net/decnet/dn_dev.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/decnet/dn_dev.c	2008-07-08 18:36:06.000000000 +0200
@@ -490,9 +490,7 @@ int dn_dev_ioctl(unsigned int cmd, void 
 		return -EFAULT;
 	ifr->ifr_name[IFNAMSIZ-1] = 0;
 
-#ifdef CONFIG_KMOD
 	dev_load(&init_net, ifr->ifr_name);
-#endif
 
 	switch(cmd) {
 		case SIOCGIFADDR:
--- everything.orig/net/ipv4/devinet.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/ipv4/devinet.c	2008-07-08 18:36:06.000000000 +0200
@@ -613,9 +613,7 @@ int devinet_ioctl(struct net *net, unsig
 	if (colon)
 		*colon = 0;
 
-#ifdef CONFIG_KMOD
 	dev_load(net, ifr.ifr_name);
-#endif
 
 	switch (cmd) {
 	case SIOCGIFADDR:	/* Get interface address */
--- everything.orig/net/ipv4/inet_diag.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/ipv4/inet_diag.c	2008-07-08 18:36:06.000000000 +0200
@@ -55,11 +55,9 @@ static DEFINE_MUTEX(inet_diag_table_mute
 
 static const struct inet_diag_handler *inet_diag_lock_handler(int type)
 {
-#ifdef CONFIG_KMOD
 	if (!inet_diag_table[type])
 		request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
 			       NETLINK_INET_DIAG, type);
-#endif
 
 	mutex_lock(&inet_diag_table_mutex);
 	if (!inet_diag_table[type])
--- everything.orig/net/ipv4/tcp_cong.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/ipv4/tcp_cong.c	2008-07-08 18:36:06.000000000 +0200
@@ -115,7 +115,7 @@ int tcp_set_default_congestion_control(c
 
 	spin_lock(&tcp_cong_list_lock);
 	ca = tcp_ca_find(name);
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 	if (!ca && capable(CAP_SYS_MODULE)) {
 		spin_unlock(&tcp_cong_list_lock);
 
@@ -244,7 +244,7 @@ int tcp_set_congestion_control(struct so
 	if (ca == icsk->icsk_ca_ops)
 		goto out;
 
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 	/* not found attempt to autoload module */
 	if (!ca && capable(CAP_SYS_MODULE)) {
 		rcu_read_unlock();
--- everything.orig/net/netfilter/nfnetlink.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/netfilter/nfnetlink.c	2008-07-08 18:36:06.000000000 +0200
@@ -134,7 +134,7 @@ static int nfnetlink_rcv_msg(struct sk_b
 	type = nlh->nlmsg_type;
 	ss = nfnetlink_get_subsys(type);
 	if (!ss) {
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 		nfnl_unlock();
 		request_module("nfnetlink-subsys-%d", NFNL_SUBSYS_ID(type));
 		nfnl_lock();
--- everything.orig/net/netlink/af_netlink.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/netlink/af_netlink.c	2008-07-08 18:36:06.000000000 +0200
@@ -434,7 +434,7 @@ static int netlink_create(struct net *ne
 		return -EPROTONOSUPPORT;
 
 	netlink_lock_table();
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 	if (!nl_table[protocol].registered) {
 		netlink_unlock_table();
 		request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
--- everything.orig/net/sched/act_api.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/sched/act_api.c	2008-07-08 18:36:06.000000000 +0200
@@ -495,7 +495,7 @@ struct tc_action *tcf_action_init_1(stru
 
 	a_o = tc_lookup_action_n(act_name);
 	if (a_o == NULL) {
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 		rtnl_unlock();
 		request_module("act_%s", act_name);
 		rtnl_lock();
--- everything.orig/net/sched/cls_api.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/sched/cls_api.c	2008-07-08 18:36:06.000000000 +0200
@@ -223,7 +223,7 @@ replay:
 		err = -ENOENT;
 		tp_ops = tcf_proto_lookup_ops(tca[TCA_KIND]);
 		if (tp_ops == NULL) {
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 			struct nlattr *kind = tca[TCA_KIND];
 			char name[IFNAMSIZ];
 
--- everything.orig/net/sched/ematch.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/sched/ematch.c	2008-07-08 18:36:06.000000000 +0200
@@ -224,7 +224,7 @@ static int tcf_em_validate(struct tcf_pr
 
 		if (em->ops == NULL) {
 			err = -ENOENT;
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 			__rtnl_unlock();
 			request_module("ematch-kind-%u", em_hdr->kind);
 			rtnl_lock();
--- everything.orig/net/sched/sch_api.c	2008-07-08 18:35:54.000000000 +0200
+++ everything/net/sched/sch_api.c	2008-07-08 18:36:06.000000000 +0200
@@ -457,7 +457,7 @@ qdisc_create(struct net_device *dev, u32
 	struct Qdisc_ops *ops;
 
 	ops = qdisc_lookup_ops(kind);
-#ifdef CONFIG_KMOD
+#ifdef CONFIG_MODULES
 	if (ops == NULL && kind != NULL) {
 		char name[IFNAMSIZ];
 		if (nla_strlcpy(name, kind, IFNAMSIZ) < IFNAMSIZ) {
--- everything.orig/net/socket.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/socket.c	2008-07-08 18:36:06.000000000 +0200
@@ -1140,7 +1140,7 @@ static int __sock_create(struct net *net
 
 	sock->type = type;
 
-#if defined(CONFIG_KMOD)
+#ifdef CONFIG_MODULES
 	/* Attempt to load a protocol module if the find failed.
 	 *
 	 * 12/09/1996 Marcin: But! this makes REALLY only sense, if the user
--- everything.orig/net/sunrpc/auth.c	2008-07-08 18:35:53.000000000 +0200
+++ everything/net/sunrpc/auth.c	2008-07-08 18:36:06.000000000 +0200
@@ -83,10 +83,8 @@ rpcauth_create(rpc_authflavor_t pseudofl
 	if (flavor >= RPC_AUTH_MAXFLAVOR)
 		goto out;
 
-#ifdef CONFIG_KMOD
 	if ((ops = auth_flavors[flavor]) == NULL)
 		request_module("rpc-auth-%u", flavor);
-#endif
 	spin_lock(&rpc_authflavor_lock);
 	ops = auth_flavors[flavor];
 	if (ops == NULL || !try_module_get(ops->owner)) {
--- everything.orig/include/linux/netdevice.h	2008-07-08 18:35:53.000000000 +0200
+++ everything/include/linux/netdevice.h	2008-07-08 18:36:06.000000000 +0200
@@ -1484,8 +1484,11 @@ extern void		dev_set_promiscuity(struct 
 extern void		dev_set_allmulti(struct net_device *dev, int inc);
 extern void		netdev_state_change(struct net_device *dev);
 extern void		netdev_features_change(struct net_device *dev);
-/* Load a device via the kmod */
+#ifdef CONFIG_MODULES
 extern void		dev_load(struct net *net, const char *name);
+#else
+static inline void	dev_load(struct net *net, const char *name) {};
+#endif
 extern void		dev_mcast_init(void);
 extern int		netdev_max_backlog;
 extern int		weight_p;

-- 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC 08/11] remove CONFIG_KMOD from net
  2008-07-08 17:00 ` [RFC 08/11] remove CONFIG_KMOD from net Johannes Berg
@ 2008-07-08 18:30   ` Adrian Bunk
  2008-07-08 18:37     ` Johannes Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian Bunk @ 2008-07-08 18:30 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-kernel, Rusty Russell, Christoph Hellwig, netdev

On Tue, Jul 08, 2008 at 07:00:23PM +0200, Johannes Berg wrote:
>...
> --- everything.orig/net/core/dev.c	2008-07-08 18:35:53.000000000 +0200
> +++ everything/net/core/dev.c	2008-07-08 18:36:06.000000000 +0200
> @@ -4639,7 +4639,7 @@ EXPORT_SYMBOL(br_fdb_get_hook);
>  EXPORT_SYMBOL(br_fdb_put_hook);
>  #endif
>  
> -#ifdef CONFIG_KMOD
> +#ifdef CONFIG_MODULES
>  EXPORT_SYMBOL(dev_load);
>  #endif
>...

You can remove the #ifdef  

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC 08/11] remove CONFIG_KMOD from net
  2008-07-08 18:30   ` Adrian Bunk
@ 2008-07-08 18:37     ` Johannes Berg
  2008-07-08 18:40       ` Adrian Bunk
  0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2008-07-08 18:37 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: linux-kernel, Rusty Russell, Christoph Hellwig, netdev

[-- Attachment #1: Type: text/plain, Size: 790 bytes --]

On Tue, 2008-07-08 at 21:30 +0300, Adrian Bunk wrote:
> On Tue, Jul 08, 2008 at 07:00:23PM +0200, Johannes Berg wrote:
> >...
> > --- everything.orig/net/core/dev.c	2008-07-08 18:35:53.000000000 +0200
> > +++ everything/net/core/dev.c	2008-07-08 18:36:06.000000000 +0200
> > @@ -4639,7 +4639,7 @@ EXPORT_SYMBOL(br_fdb_get_hook);
> >  EXPORT_SYMBOL(br_fdb_put_hook);
> >  #endif
> >  
> > -#ifdef CONFIG_KMOD
> > +#ifdef CONFIG_MODULES
> >  EXPORT_SYMBOL(dev_load);
> >  #endif
> >...
> 
> You can remove the #ifdef  

Eh, no. Not unless I also always compile in dev_load, which as of now
depends on CONFIG_MODULES. In fact, another hunk in this series makes it
a static inline when CONFIG_MODULES=n so that callers don't need to take
care of #ifdef'ing it.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC 08/11] remove CONFIG_KMOD from net
  2008-07-08 18:37     ` Johannes Berg
@ 2008-07-08 18:40       ` Adrian Bunk
  2008-07-08 18:42         ` Johannes Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Adrian Bunk @ 2008-07-08 18:40 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-kernel, Rusty Russell, Christoph Hellwig, netdev

On Tue, Jul 08, 2008 at 08:37:00PM +0200, Johannes Berg wrote:
> On Tue, 2008-07-08 at 21:30 +0300, Adrian Bunk wrote:
> > On Tue, Jul 08, 2008 at 07:00:23PM +0200, Johannes Berg wrote:
> > >...
> > > --- everything.orig/net/core/dev.c	2008-07-08 18:35:53.000000000 +0200
> > > +++ everything/net/core/dev.c	2008-07-08 18:36:06.000000000 +0200
> > > @@ -4639,7 +4639,7 @@ EXPORT_SYMBOL(br_fdb_get_hook);
> > >  EXPORT_SYMBOL(br_fdb_put_hook);
> > >  #endif
> > >  
> > > -#ifdef CONFIG_KMOD
> > > +#ifdef CONFIG_MODULES
> > >  EXPORT_SYMBOL(dev_load);
> > >  #endif
> > >...
> > 
> > You can remove the #ifdef  
> 
> Eh, no. Not unless I also always compile in dev_load, which as of now
> depends on CONFIG_MODULES. In fact, another hunk in this series makes it
> a static inline when CONFIG_MODULES=n so that callers don't need to take
> care of #ifdef'ing it.

Look at include/linux/module.h:

...
#ifdef CONFIG_MODULES
...
#define EXPORT_SYMBOL(sym)                                      \
        __EXPORT_SYMBOL(sym, "")
...
#else /* !CONFIG_MODULES... */
#define EXPORT_SYMBOL(sym)
...

> johannes

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC 08/11] remove CONFIG_KMOD from net
  2008-07-08 18:40       ` Adrian Bunk
@ 2008-07-08 18:42         ` Johannes Berg
  0 siblings, 0 replies; 5+ messages in thread
From: Johannes Berg @ 2008-07-08 18:42 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: linux-kernel, Rusty Russell, Christoph Hellwig, netdev

[-- Attachment #1: Type: text/plain, Size: 652 bytes --]


> > Eh, no. Not unless I also always compile in dev_load, which as of now
> > depends on CONFIG_MODULES. In fact, another hunk in this series makes it
> > a static inline when CONFIG_MODULES=n so that callers don't need to take
> > care of #ifdef'ing it.
> 
> Look at include/linux/module.h:
> 
> ...
> #ifdef CONFIG_MODULES
> ...
> #define EXPORT_SYMBOL(sym)                                      \
>         __EXPORT_SYMBOL(sym, "")
> ...
> #else /* !CONFIG_MODULES... */
> #define EXPORT_SYMBOL(sym)
> ...

Oh, right, I forgot I was dealing with CONFIG_MODULES and treated it
just like another config option, thanks.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-07-08 18:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20080708170015.470877000@sipsolutions.net>
2008-07-08 17:00 ` [RFC 08/11] remove CONFIG_KMOD from net Johannes Berg
2008-07-08 18:30   ` Adrian Bunk
2008-07-08 18:37     ` Johannes Berg
2008-07-08 18:40       ` Adrian Bunk
2008-07-08 18:42         ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).