Implements set_dlimit and get_dlimit for vserver disk limits.
authorMarc Fiuczynski <mef@cs.princeton.edu>
Mon, 11 Jul 2005 18:40:11 +0000 (18:40 +0000)
committerMarc Fiuczynski <mef@cs.princeton.edu>
Mon, 11 Jul 2005 18:40:11 +0000 (18:40 +0000)
NM should use set to initialize the disk limits, and can use
get to export the disk limits of a vserver.

python/vserverimpl.c

index 58b0a61..3e76914 100644 (file)
@@ -164,9 +164,39 @@ struct  vcmd_ctx_dlimit_v0 {
 #define CDLIM_KEEP              (~1ULL)
 
 static PyObject *
-vserver_dlimit(PyObject *self, PyObject *args)
+vserver_get_dlimit(PyObject *self, PyObject *args)
 {
        PyObject *res;
+       char* path;
+       unsigned xid;
+       struct vcmd_ctx_dlimit_v0 data;
+       int r;
+
+       if (!PyArg_ParseTuple(args, "si", &path,&xid))
+               return NULL;
+
+       memset(&data, 0, sizeof(data));
+       data.name = path;
+       data.flags = 0;
+       r = vserver(VCMD_get_dlimit, xid, &data);
+       if (r>=0) {
+               res = Py_BuildValue("(i,i,i,i,i)",
+                                   data.space_used,
+                                   data.space_total,
+                                   data.inodes_used,
+                                   data.inodes_total,
+                                   data.reserved);
+       } else {
+               res = PyErr_SetFromErrno(PyExc_OSError);
+       }
+
+       return res;
+}
+
+
+static PyObject *
+vserver_set_dlimit(PyObject *self, PyObject *args)
+{
        char* path;
        unsigned xid;
        struct vcmd_ctx_dlimit_base_v0 init;
@@ -186,6 +216,7 @@ vserver_dlimit(PyObject *self, PyObject *args)
        data.name = path;
        data.flags = 0;
 
+       memset(&init, 0, sizeof(init));
        init.name = path;
        init.flags = 0;
 
@@ -195,23 +226,7 @@ vserver_dlimit(PyObject *self, PyObject *args)
        if (r<0){}
        r = vserver(VCMD_set_dlimit, xid, &data);
        if (r<0){}
-
-       memset(&data, 0, sizeof(data));
-       data.name = path;
-       data.flags = 0;
-       r = vserver(VCMD_get_dlimit, xid, &data);
-       if (r>=0) {
-               res = Py_BuildValue("(i,i,i,i,i)",
-                                   data.space_used,
-                                   data.space_total,
-                                   data.inodes_used,
-                                   data.inodes_total,
-                                   data.reserved);
-       } else {
-               res = PyErr_SetFromErrno(PyExc_OSError);
-       }
-
-       return res;
+       return Py_None; 
 }
 
 static PyMethodDef  methods[] = {
@@ -219,8 +234,10 @@ static PyMethodDef  methods[] = {
     "Change to the given vserver context" },
   { "setsched", vserver_setsched, METH_VARARGS,
     "Change vserver scheduling attributes for given vserver context" },
-  { "dlimit", vserver_dlimit, METH_VARARGS,
+  { "setdlimit", vserver_set_dlimit, METH_VARARGS,
     "Set disk limits for given vserver context" },
+  { "getdlimit", vserver_get_dlimit, METH_VARARGS,
+    "Get disk limits for given vserver context" },
   { "tasklimit", vserver_tasklimit, METH_VARARGS,
     "Set task limits for given vserver context" },
   { "memlimit", vserver_memlimit, METH_VARARGS,