diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-12-03 11:15:36 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-12-03 11:15:36 -0500 |
commit | 8002cedc1adbf51e2d56091534ef7551b88329b4 (patch) | |
tree | 2c65c82b2b5300eac581a0ee794d98f0b61593b6 /net/rfkill/rfkill.c | |
parent | e87cb5db0dc357473ac71801051954ddd6ff604f (diff) | |
parent | d523a328fb0271e1a763e985a21f2488fd816e7e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/net-2.6: (27 commits)
[INET]: Fix inet_diag dead-lock regression
[NETNS]: Fix /proc/net breakage
[TEXTSEARCH]: Do not allow zero length patterns in the textsearch infrastructure
[NETFILTER]: fix forgotten module release in xt_CONNMARK and xt_CONNSECMARK
[NETFILTER]: xt_TCPMSS: remove network triggerable WARN_ON
[DECNET]: dn_nl_deladdr() almost always returns no error
[IPV6]: Restore IPv6 when MTU is big enough
[RXRPC]: Add missing select on CRYPTO
mac80211: rate limit wep decrypt failed messages
rfkill: fix double-mutex-locking
mac80211: drop unencrypted frames if encryption is expected
mac80211: Fix behavior of ieee80211_open and ieee80211_close
ieee80211: fix unaligned access in ieee80211_copy_snap
mac80211: free ifsta->extra_ie and clear IEEE80211_STA_PRIVACY_INVOKED
SCTP: Fix build issues with SCTP AUTH.
SCTP: Fix chunk acceptance when no authenticated chunks were listed.
SCTP: Fix the supported extensions paramter
SCTP: Fix SCTP-AUTH to correctly add HMACS paramter.
SCTP: Fix the number of HB transmissions.
[TCP] illinois: Incorrect beta usage
...
Diffstat (limited to 'net/rfkill/rfkill.c')
-rw-r--r-- | net/rfkill/rfkill.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c index 73d60a3071..4469a7be00 100644 --- a/net/rfkill/rfkill.c +++ b/net/rfkill/rfkill.c | |||
@@ -60,11 +60,7 @@ static void rfkill_led_trigger(struct rfkill *rfkill, | |||
60 | static int rfkill_toggle_radio(struct rfkill *rfkill, | 60 | static int rfkill_toggle_radio(struct rfkill *rfkill, |
61 | enum rfkill_state state) | 61 | enum rfkill_state state) |
62 | { | 62 | { |
63 | int retval; | 63 | int retval = 0; |
64 | |||
65 | retval = mutex_lock_interruptible(&rfkill->mutex); | ||
66 | if (retval) | ||
67 | return retval; | ||
68 | 64 | ||
69 | if (state != rfkill->state) { | 65 | if (state != rfkill->state) { |
70 | retval = rfkill->toggle_radio(rfkill->data, state); | 66 | retval = rfkill->toggle_radio(rfkill->data, state); |
@@ -74,7 +70,6 @@ static int rfkill_toggle_radio(struct rfkill *rfkill, | |||
74 | } | 70 | } |
75 | } | 71 | } |
76 | 72 | ||
77 | mutex_unlock(&rfkill->mutex); | ||
78 | return retval; | 73 | return retval; |
79 | } | 74 | } |
80 | 75 | ||
@@ -158,12 +153,13 @@ static ssize_t rfkill_state_store(struct device *dev, | |||
158 | if (!capable(CAP_NET_ADMIN)) | 153 | if (!capable(CAP_NET_ADMIN)) |
159 | return -EPERM; | 154 | return -EPERM; |
160 | 155 | ||
156 | if (mutex_lock_interruptible(&rfkill->mutex)) | ||
157 | return -ERESTARTSYS; | ||
161 | error = rfkill_toggle_radio(rfkill, | 158 | error = rfkill_toggle_radio(rfkill, |
162 | state ? RFKILL_STATE_ON : RFKILL_STATE_OFF); | 159 | state ? RFKILL_STATE_ON : RFKILL_STATE_OFF); |
163 | if (error) | 160 | mutex_unlock(&rfkill->mutex); |
164 | return error; | ||
165 | 161 | ||
166 | return count; | 162 | return error ? error : count; |
167 | } | 163 | } |
168 | 164 | ||
169 | static ssize_t rfkill_claim_show(struct device *dev, | 165 | static ssize_t rfkill_claim_show(struct device *dev, |