diff options
| -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 73d60a307129..4469a7be006c 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, |
