Commit 91cde6f7d295a9eafea51d821f6e609288736c79
Committed by
David S. Miller
1 parent
c0e1899bdb
Exists in
master
and in
7 other branches
[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
net/irda/irlmp.c
... | ... | @@ -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); |
net/irda/irsysctl.c
... | ... | @@ -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, |