can: fix CAN BCM build with CONFIG_PROC_FS disabled
authorOliver Hartkopp <socketcan@hartkopp.net>
Wed, 26 Apr 2017 18:14:34 +0000 (20:14 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 27 Apr 2017 07:34:13 +0000 (09:34 +0200)
The introduced namespace support moved the BCM variables for procfs into a
per-net data structure. This leads to a build failure with disabled procfs:

on x86_64:

when CONFIG_PROC_FS is not enabled:

../net/can/bcm.c:1541:14: error: 'struct netns_can' has no member named 'bcmproc_dir'
../net/can/bcm.c:1601:14: error: 'struct netns_can' has no member named 'bcmproc_dir'
../net/can/bcm.c:1696:11: error: 'struct netns_can' has no member named 'bcmproc_dir'
../net/can/bcm.c:1707:15: error: 'struct netns_can' has no member named 'bcmproc_dir'

http://marc.info/?l=linux-can&m=149321842526524&w=2

Reported-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
net/can/bcm.c

index 0e855917b7e117d9a890fb46918d0d1ff7a4305c..65432633a25000361c720058f8c3e8499fff9529 100644 (file)
@@ -147,6 +147,7 @@ static inline ktime_t bcm_timeval_to_ktime(struct bcm_timeval tv)
 /*
  * procfs functions
  */
+#if IS_ENABLED(CONFIG_PROC_FS)
 static char *bcm_proc_getifname(struct net *net, char *result, int ifindex)
 {
        struct net_device *dev;
@@ -251,6 +252,7 @@ static const struct file_operations bcm_proc_fops = {
        .llseek         = seq_lseek,
        .release        = single_release,
 };
+#endif /* CONFIG_PROC_FS */
 
 /*
  * bcm_can_tx - send the (next) CAN frame to the appropriate CAN interface
@@ -1537,9 +1539,11 @@ static int bcm_release(struct socket *sock)
                bcm_remove_op(op);
        }
 
+#if IS_ENABLED(CONFIG_PROC_FS)
        /* remove procfs entry */
        if (net->can.bcmproc_dir && bo->bcm_proc_read)
                remove_proc_entry(bo->procname, net->can.bcmproc_dir);
+#endif /* CONFIG_PROC_FS */
 
        /* remove device reference */
        if (bo->bound) {
@@ -1598,6 +1602,7 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
                bo->ifindex = 0;
        }
 
+#if IS_ENABLED(CONFIG_PROC_FS)
        if (net->can.bcmproc_dir) {
                /* unique socket address as filename */
                sprintf(bo->procname, "%lu", sock_i_ino(sk));
@@ -1609,6 +1614,7 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
                        goto fail;
                }
        }
+#endif /* CONFIG_PROC_FS */
 
        bo->bound = 1;
 
@@ -1691,22 +1697,21 @@ static const struct can_proto bcm_can_proto = {
 
 static int canbcm_pernet_init(struct net *net)
 {
+#if IS_ENABLED(CONFIG_PROC_FS)
        /* create /proc/net/can-bcm directory */
-       if (IS_ENABLED(CONFIG_PROC_FS)) {
-               net->can.bcmproc_dir =
-                       proc_net_mkdir(net, "can-bcm", net->proc_net);
-       }
+       net->can.bcmproc_dir = proc_net_mkdir(net, "can-bcm", net->proc_net);
+#endif /* CONFIG_PROC_FS */
 
        return 0;
 }
 
 static void canbcm_pernet_exit(struct net *net)
 {
+#if IS_ENABLED(CONFIG_PROC_FS)
        /* remove /proc/net/can-bcm directory */
-       if (IS_ENABLED(CONFIG_PROC_FS)) {
-               if (net->can.bcmproc_dir)
-                       remove_proc_entry("can-bcm", net->proc_net);
-       }
+       if (net->can.bcmproc_dir)
+               remove_proc_entry("can-bcm", net->proc_net);
+#endif /* CONFIG_PROC_FS */
 }
 
 static struct pernet_operations canbcm_pernet_ops __read_mostly = {