diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/limit.c linux-2.6.17.8-vs2.1.1-rc29.2.3/kernel/vserver/limit.c --- linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/limit.c 2006-07-09 19:22:06 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.2.3/kernel/vserver/limit.c 2006-08-19 13:38:21 +0200 @@ -221,6 +221,30 @@ int vc_reset_minmax(struct vx_info *vxi, } +int vc_rlimit_stat(struct vx_info *vxi, void __user *data) +{ + struct vcmd_rlimit_stat_v0 vc_data; + struct _vx_limit *limit = &vxi->limit; + int id; + + if (copy_from_user (&vc_data, data, sizeof(vc_data))) + return -EFAULT; + + id = vc_data.id; + if (!is_valid_rlimit(id)) + return -EINVAL; + + vc_data.hits = atomic_read(&__rlim_lhit(limit, id)); + vc_data.value = __rlim_get(limit, id); + vc_data.minimum = __rlim_rmin(limit, id); + vc_data.maximum = __rlim_rmax(limit, id); + + if (copy_to_user (data, &vc_data, sizeof(vc_data))) + return -EFAULT; + return 0; +} + + void vx_vsi_meminfo(struct sysinfo *val) { struct vx_info *vxi = current->vx_info; diff -NurpP --minimal linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/switch.c linux-2.6.17.8-vs2.1.1-rc29.2.3/kernel/vserver/switch.c --- linux-2.6.17.8-vs2.1.1-rc29.2.2/kernel/vserver/switch.c 2006-08-19 04:02:56 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.2.3/kernel/vserver/switch.c 2006-08-19 13:33:10 +0200 @@ -119,6 +119,8 @@ long do_vcmd(uint32_t cmd, uint32_t id, case VCMD_sock_stat: return vc_sock_stat(vxi, data); + case VCMD_rlimit_stat: + return vc_rlimit_stat(vxi, data); case VCMD_set_cflags: return vc_set_cflags(vxi, data); @@ -271,6 +273,7 @@ long do_vserver(uint32_t cmd, uint32_t i __VCMD(get_rlimit, 3, VCA_VXI, VCF_INFO); __VCMD(sock_stat, 3, VCA_VXI, VCF_INFO); + __VCMD(rlimit_stat, 3, VCA_VXI, VCF_INFO); __VCMD(task_nid, 2, VCA_NONE, 0); __VCMD(nx_info, 3, VCA_NXI, VCF_INFO);