gentoo: use /var/run for new /run compatibility
[util-vserver.git] / lib / syscall_setsched-v21.hc
index e89e480..83793b8 100644 (file)
@@ -26,8 +26,8 @@ static inline ALWAYSINLINE int
 vc_set_sched_v21(xid_t xid, struct vc_set_sched const *data)
 {
   struct vcmd_set_sched_v4     k_data;
+  int ret;
 
-  k_data.set_mask   = data->set_mask;
   k_data.fill_rate  = data->fill_rate;
   k_data.interval   = data->interval;
   k_data.tokens     = data->tokens;
@@ -37,5 +37,21 @@ vc_set_sched_v21(xid_t xid, struct vc_set_sched const *data)
   k_data.cpu_id            = data->cpu_id;
   k_data.bucket_id  = data->bucket_id;
 
-  return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data);
+  if ((data->set_mask & VC_VXSM_FILL_RATE2 && data->fill_rate != data->fill_rate2) ||
+      (data->set_mask & VC_VXSM_INTERVAL2 && data->interval != data->interval2)) {
+    /* first set the regular values */
+    k_data.set_mask = data->set_mask & ~(VC_VXSM_FILL_RATE2|VC_VXSM_INTERVAL2|VC_VXSM_FORCE);
+    ret = vserver(VCMD_set_sched_v4, CTX_USER2KERNEL(xid), &k_data);
+    if (ret)
+      return ret;
+    /* then set idle time */
+    k_data.set_mask  = data->set_mask & (VC_VXSM_FILL_RATE2|VC_VXSM_INTERVAL2|VC_VXSM_FORCE|VC_VXSM_IDLE_TIME|VC_VXSM_CPU_ID|VC_VXSM_BUCKET_ID);
+    k_data.fill_rate = data->fill_rate2;
+    k_data.interval  = data->interval2;
+    return vserver(VCMD_set_sched_v4, CTX_USER2KERNEL(xid), &k_data);
+  }
+  else {
+    k_data.set_mask = data->set_mask;
+    return vserver(VCMD_set_sched_v4, CTX_USER2KERNEL(xid), &k_data);
+  }
 }