Set svn:keywords.
authorDaniel Hokka Zakrisson <daniel@hozac.com>
Sun, 5 Nov 2006 17:48:24 +0000 (17:48 +0000)
committerDaniel Hokka Zakrisson <daniel@hozac.com>
Sun, 5 Nov 2006 17:48:24 +0000 (17:48 +0000)
Fix the vc_set_sched API to make more sense, and handle the logic in the wrapper.

git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2372 94cd875c-1c1d-0410-91d2-eb244daf1a30

lib/syscall_setsched-v21.hc
lib/vserver.h

index e89e480..24b5977 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, 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, CTX_USER2KERNEL(xid), &k_data);
+  }
+  else {
+    k_data.set_mask = data->set_mask;
+    return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data);
+  }
 }
index b704b17..105c0df 100644 (file)
@@ -706,6 +706,8 @@ extern "C" {
       uint_least32_t   set_mask;
       int_least32_t    fill_rate;
       int_least32_t    interval;
+      int_least32_t    fill_rate2;
+      int_least32_t    interval2;
       int_least32_t    tokens;
       int_least32_t    tokens_min;
       int_least32_t    tokens_max;