diff -NurpP --minimal linux-2.6.30.4-vs2.3.0.36.14-pre4/include/linux/vserver/limit_cmd.h linux-2.6.30.4-vs2.3.0.36.14-pre4.1/include/linux/vserver/limit_cmd.h --- linux-2.6.30.4-vs2.3.0.36.14-pre4/include/linux/vserver/limit_cmd.h 2009-07-04 01:11:39.000000000 +0200 +++ linux-2.6.30.4-vs2.3.0.36.14-pre4.1/include/linux/vserver/limit_cmd.h 2009-08-07 22:51:49.000000000 +0200 @@ -7,6 +7,7 @@ #define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0) #define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0) #define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0) +#define VCMD_reset_hits VC_CMD(RLIMIT, 7, 0) #define VCMD_reset_minmax VC_CMD(RLIMIT, 9, 0) struct vcmd_ctx_rlimit_v0 { @@ -54,6 +55,7 @@ struct vcmd_ctx_rlimit_v0_x32 { extern int vc_get_rlimit_mask(uint32_t, void __user *); extern int vc_get_rlimit(struct vx_info *, void __user *); extern int vc_set_rlimit(struct vx_info *, void __user *); +extern int vc_reset_hits(struct vx_info *, void __user *); extern int vc_reset_minmax(struct vx_info *, void __user *); extern int vc_rlimit_stat(struct vx_info *, void __user *); diff -NurpP --minimal linux-2.6.30.4-vs2.3.0.36.14-pre4/kernel/vserver/limit.c linux-2.6.30.4-vs2.3.0.36.14-pre4.1/kernel/vserver/limit.c --- linux-2.6.30.4-vs2.3.0.36.14-pre4/kernel/vserver/limit.c 2009-07-04 01:11:39.000000000 +0200 +++ linux-2.6.30.4-vs2.3.0.36.14-pre4.1/kernel/vserver/limit.c 2009-08-07 23:11:53.000000000 +0200 @@ -203,6 +203,21 @@ int vc_get_rlimit_mask(uint32_t id, void } +static inline void vx_reset_hits(struct _vx_limit *limit) +{ + int lim; + + for (lim = 0; lim < NUM_LIMITS; lim++) { + atomic_set(&__rlim_lhit(limit, lim), 0); + } +} + +int vc_reset_hits(struct vx_info *vxi, void __user *data) +{ + vx_reset_hits(&vxi->limit); + return 0; +} + static inline void vx_reset_minmax(struct _vx_limit *limit) { rlim_t value; @@ -215,7 +230,6 @@ static inline void vx_reset_minmax(struc } } - int vc_reset_minmax(struct vx_info *vxi, void __user *data) { vx_reset_minmax(&vxi->limit); diff -NurpP --minimal linux-2.6.30.4-vs2.3.0.36.14-pre4/kernel/vserver/switch.c linux-2.6.30.4-vs2.3.0.36.14-pre4.1/kernel/vserver/switch.c --- linux-2.6.30.4-vs2.3.0.36.14-pre4/kernel/vserver/switch.c 2009-07-04 01:11:39.000000000 +0200 +++ linux-2.6.30.4-vs2.3.0.36.14-pre4.1/kernel/vserver/switch.c 2009-08-07 22:54:36.000000000 +0200 @@ -122,6 +122,8 @@ long do_vcmd(uint32_t cmd, uint32_t id, #endif case VCMD_get_rlimit_mask: return vc_get_rlimit_mask(id, data); + case VCMD_reset_hits: + return vc_reset_hits(vxi, data); case VCMD_reset_minmax: return vc_reset_minmax(vxi, data); @@ -320,6 +322,7 @@ long do_vserver(uint32_t cmd, uint32_t i /* info commands */ __VCMD(task_xid, 2, VCA_NONE, 0); + __VCMD(reset_hits, 2, VCA_VXI, 0); __VCMD(reset_minmax, 2, VCA_VXI, 0); __VCMD(vx_info, 3, VCA_VXI, VCF_INFO); __VCMD(get_bcaps, 3, VCA_VXI, VCF_INFO);