|
@@ -60,11 +60,7 @@ static void rfkill_led_trigger(struct rfkill *rfkill,
|
|
|
static int rfkill_toggle_radio(struct rfkill *rfkill,
|
|
|
enum rfkill_state state)
|
|
|
{
|
|
|
- int retval;
|
|
|
-
|
|
|
- retval = mutex_lock_interruptible(&rfkill->mutex);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
+ int retval = 0;
|
|
|
|
|
|
if (state != rfkill->state) {
|
|
|
retval = rfkill->toggle_radio(rfkill->data, state);
|
|
@@ -74,7 +70,6 @@ static int rfkill_toggle_radio(struct rfkill *rfkill,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- mutex_unlock(&rfkill->mutex);
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
@@ -158,12 +153,13 @@ static ssize_t rfkill_state_store(struct device *dev,
|
|
|
if (!capable(CAP_NET_ADMIN))
|
|
|
return -EPERM;
|
|
|
|
|
|
+ if (mutex_lock_interruptible(&rfkill->mutex))
|
|
|
+ return -ERESTARTSYS;
|
|
|
error = rfkill_toggle_radio(rfkill,
|
|
|
state ? RFKILL_STATE_ON : RFKILL_STATE_OFF);
|
|
|
- if (error)
|
|
|
- return error;
|
|
|
+ mutex_unlock(&rfkill->mutex);
|
|
|
|
|
|
- return count;
|
|
|
+ return error ? error : count;
|
|
|
}
|
|
|
|
|
|
static ssize_t rfkill_claim_show(struct device *dev,
|