X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fvserverimpl.c;h=5b2cdb89232aee399c4cf8dc007b3d4c56878a79;hb=e059b363cf337734098e0b06408fea9712d14997;hp=58b0a6125c2816ba30f69fc798e786eb2f42029e;hpb=b15d92ff405320b0b0a95e536f3dfb29ce763f9f;p=util-vserver.git diff --git a/python/vserverimpl.c b/python/vserverimpl.c index 58b0a61..5b2cdb8 100644 --- a/python/vserverimpl.c +++ b/python/vserverimpl.c @@ -71,16 +71,16 @@ vserver_chcontext(PyObject *self, PyObject *args) } static PyObject * -__vserver_rlimit(PyObject *self, PyObject *args, int resource) { +vserver_set_rlimit(PyObject *self, PyObject *args) { struct vc_rlimit limits; - int xid; + int xid, resource; PyObject *ret; limits.min = VC_LIM_KEEP; limits.soft = VC_LIM_KEEP; limits.hard = VC_LIM_KEEP; - if (!PyArg_ParseTuple(args, "iL", &xid, &limits.hard)) + if (!PyArg_ParseTuple(args, "iiL", &xid, &resource, &limits.hard)) return NULL; ret = Py_None; @@ -94,18 +94,27 @@ __vserver_rlimit(PyObject *self, PyObject *args, int resource) { return ret; } - static PyObject * -vserver_memlimit(PyObject *self, PyObject *args) { - return __vserver_rlimit(self,args,5); -} +vserver_get_rlimit(PyObject *self, PyObject *args) { + struct vc_rlimit limits; + int xid, resource; + PyObject *ret; -static PyObject * -vserver_tasklimit(PyObject *self, PyObject *args) { - return __vserver_rlimit(self,args,6); -} + limits.min = VC_LIM_KEEP; + limits.soft = VC_LIM_KEEP; + limits.hard = VC_LIM_KEEP; + if (!PyArg_ParseTuple(args, "ii", &xid, &resource)) + return NULL; + ret = Py_None; + if (vc_get_rlimit(xid, resource, &limits)==-1) + ret = PyErr_SetFromErrno(PyExc_OSError); + else + ret = Py_BuildValue("L",limits.hard); + + return ret; +} /* * setsched @@ -164,9 +173,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 +225,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 +235,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,12 +243,14 @@ 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" }, - { "tasklimit", vserver_tasklimit, METH_VARARGS, - "Set task limits for given vserver context" }, - { "memlimit", vserver_memlimit, METH_VARARGS, - "Set memory limits for given vserver context" }, + { "getdlimit", vserver_get_dlimit, METH_VARARGS, + "Get disk limits for given vserver context" }, + { "setrlimit", vserver_set_rlimit, METH_VARARGS, + "Set resource limits for given resource of a vserver context" }, + { "getrlimit", vserver_get_rlimit, METH_VARARGS, + "Get resource limits for given resource of a vserver context" }, { NULL, NULL, 0, NULL } };