static int proc_toggle_thread_pause(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { int old_val = kgnilnd_sysctl.ksd_pause_trigger; int rc = 0; ENTRY; rc = proc_dointvec(table, write, buffer, lenp, ppos); if (!write) { /* read */ RETURN(rc); } if (kgnilnd_data.kgn_init != GNILND_INIT_ALL) { rc = -EINVAL; RETURN(rc); } if (old_val != kgnilnd_sysctl.ksd_pause_trigger) { mutex_lock(&kgnilnd_data.kgn_quiesce_mutex); CDEBUG(D_NET, "setting quiesce_trigger %d\n", old_val); kgnilnd_data.kgn_quiesce_trigger = kgnilnd_sysctl.ksd_pause_trigger; kgnilnd_quiesce_wait("admin sysctl"); mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex); } RETURN(rc); }
static int LL_PROC_PROTO(proc_toggle_thread_pause) { int old_val = kgnilnd_sysctl.ksd_pause_trigger; int rc = 0; ENTRY; rc = ll_proc_dointvec(table, write, filp, buffer, lenp, ppos); if (!write) { /* read */ RETURN(rc); } if (kgnilnd_data.kgn_init != GNILND_INIT_ALL) { rc = -EINVAL; RETURN(rc); } if (old_val != kgnilnd_sysctl.ksd_pause_trigger) { down(&kgnilnd_data.kgn_quiesce_sem); CDEBUG(D_NET, "setting quiesce_trigger %d\n", old_val); kgnilnd_data.kgn_quiesce_trigger = kgnilnd_sysctl.ksd_pause_trigger; kgnilnd_quiesce_wait("admin sysctl"); up(&kgnilnd_data.kgn_quiesce_sem); } RETURN(rc); }