Commit 91cde6f7d295a9eafea51d821f6e609288736c79

Authored by Ross Burton
Committed by David S. Miller
1 parent c0e1899bdb

[IrDA]: LMP discovery timer not started by default

By default, LMP sets up a 3 seconds timer for discovery.
We don't need it until discovery is set to 1.

Signed-off-by: Ross Burton <ross@openedhand.com>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 3 changed files with 33 additions and 6 deletions Side-by-side Diff

... ... @@ -103,9 +103,12 @@
103 103 irlmp->last_lsap_sel = 0x0f; /* Reserved 0x00-0x0f */
104 104 strcpy(sysctl_devname, "Linux");
105 105  
106   - /* Do discovery every 3 seconds */
107 106 init_timer(&irlmp->discovery_timer);
108   - irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout*HZ);
  107 +
  108 + /* Do discovery every 3 seconds, conditionaly */
  109 + if (sysctl_discovery)
  110 + irlmp_start_discovery_timer(irlmp,
  111 + sysctl_discovery_timeout*HZ);
109 112  
110 113 return 0;
111 114 }
net/irda/irlmp_event.c
... ... @@ -174,9 +174,7 @@
174 174 /* We always cleanup the log (active & passive discovery) */
175 175 irlmp_do_expiry();
176 176  
177   - /* Active discovery is conditional */
178   - if (sysctl_discovery)
179   - irlmp_do_discovery(sysctl_discovery_slots);
  177 + irlmp_do_discovery(sysctl_discovery_slots);
180 178  
181 179 /* Restart timer */
182 180 irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout * HZ);
... ... @@ -29,6 +29,8 @@
29 29 #include <linux/init.h>
30 30  
31 31 #include <net/irda/irda.h> /* irda_debug */
  32 +#include <net/irda/irlmp.h>
  33 +#include <net/irda/timer.h>
32 34 #include <net/irda/irias_object.h>
33 35  
34 36 extern int sysctl_discovery;
... ... @@ -45,6 +47,8 @@
45 47 extern int sysctl_warn_noreply_time;
46 48 extern int sysctl_lap_keepalive_time;
47 49  
  50 +extern struct irlmp_cb *irlmp;
  51 +
48 52 /* this is needed for the proc_dointvec_minmax - Jean II */
49 53 static int max_discovery_slots = 16; /* ??? */
50 54 static int min_discovery_slots = 1;
... ... @@ -85,6 +89,27 @@
85 89 return ret;
86 90 }
87 91  
  92 +
  93 +static int do_discovery(ctl_table *table, int write, struct file *filp,
  94 + void __user *buffer, size_t *lenp, loff_t *ppos)
  95 +{
  96 + int ret;
  97 +
  98 + ret = proc_dointvec(table, write, filp, buffer, lenp, ppos);
  99 + if (ret)
  100 + return ret;
  101 +
  102 + if (irlmp == NULL)
  103 + return -ENODEV;
  104 +
  105 + if (sysctl_discovery)
  106 + irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout*HZ);
  107 + else
  108 + del_timer_sync(&irlmp->discovery_timer);
  109 +
  110 + return ret;
  111 +}
  112 +
88 113 /* One file */
89 114 static ctl_table irda_table[] = {
90 115 {
... ... @@ -93,7 +118,8 @@
93 118 .data = &sysctl_discovery,
94 119 .maxlen = sizeof(int),
95 120 .mode = 0644,
96   - .proc_handler = &proc_dointvec
  121 + .proc_handler = &do_discovery,
  122 + .strategy = &sysctl_intvec
97 123 },
98 124 {
99 125 .ctl_name = NET_IRDA_DEVNAME,