|
@@ -520,13 +520,15 @@ int proc_dowatchdog(struct ctl_table *table, int write,
|
|
|
void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
{
|
|
|
int err, old_thresh, old_enabled;
|
|
|
+ static DEFINE_MUTEX(watchdog_proc_mutex);
|
|
|
|
|
|
+ mutex_lock(&watchdog_proc_mutex);
|
|
|
old_thresh = ACCESS_ONCE(watchdog_thresh);
|
|
|
old_enabled = ACCESS_ONCE(watchdog_user_enabled);
|
|
|
|
|
|
err = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
|
|
|
if (err || !write)
|
|
|
- return err;
|
|
|
+ goto out;
|
|
|
|
|
|
set_sample_period();
|
|
|
/*
|
|
@@ -544,7 +546,8 @@ int proc_dowatchdog(struct ctl_table *table, int write,
|
|
|
watchdog_thresh = old_thresh;
|
|
|
watchdog_user_enabled = old_enabled;
|
|
|
}
|
|
|
-
|
|
|
+out:
|
|
|
+ mutex_unlock(&watchdog_proc_mutex);
|
|
|
return err;
|
|
|
}
|
|
|
#endif /* CONFIG_SYSCTL */
|