/[vps]/vserver-sources/2.1.1-r1/4413_vs2.1.1-vlimit-clean01.patch
Gentoo

Contents of /vserver-sources/2.1.1-r1/4413_vs2.1.1-vlimit-clean01.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 526 - (show annotations) (download)
Tue Nov 14 17:41:50 2006 UTC (7 years, 9 months ago) by phreak
File size: 3236 byte(s)
Updated patchset for 2.1.1.
1 Index: linux-2.6.18/kernel/vserver/limit.c
2 ===================================================================
3 --- linux-2.6.18.orig/kernel/vserver/limit.c
4 +++ linux-2.6.18/kernel/vserver/limit.c
5 @@ -41,31 +41,53 @@ const char *vlimit_name[NUM_LIMITS] = {
6
7 EXPORT_SYMBOL_GPL(vlimit_name);
8
9 +#define MASK_ENTRY(x) (1 << (x))
10
11 -static int is_valid_rlimit(int id)
12 -{
13 - int valid = 0;
14 -
15 - switch (id) {
16 - case RLIMIT_RSS:
17 - case RLIMIT_NPROC:
18 - case RLIMIT_NOFILE:
19 - case RLIMIT_MEMLOCK:
20 - case RLIMIT_AS:
21 - case RLIMIT_LOCKS:
22 - case RLIMIT_MSGQUEUE:
23 -
24 - case VLIMIT_NSOCK:
25 - case VLIMIT_OPENFD:
26 - case VLIMIT_ANON:
27 - case VLIMIT_SHMEM:
28 - case VLIMIT_DENTRY:
29 - valid = 1;
30 - break;
31 - }
32 - return valid;
33 +const struct vcmd_ctx_rlimit_mask_v0 vlimit_mask = {
34 + /* minimum */
35 + 0
36 + , /* softlimit */
37 + MASK_ENTRY( RLIMIT_RSS ) |
38 + MASK_ENTRY( VLIMIT_ANON ) |
39 + 0
40 + , /* maximum */
41 + MASK_ENTRY( RLIMIT_RSS ) |
42 + MASK_ENTRY( RLIMIT_NPROC ) |
43 + MASK_ENTRY( RLIMIT_NOFILE ) |
44 + MASK_ENTRY( RLIMIT_MEMLOCK ) |
45 + MASK_ENTRY( RLIMIT_AS ) |
46 + MASK_ENTRY( RLIMIT_LOCKS ) |
47 + MASK_ENTRY( RLIMIT_MSGQUEUE ) |
48 +
49 + MASK_ENTRY( VLIMIT_NSOCK ) |
50 + MASK_ENTRY( VLIMIT_OPENFD ) |
51 + MASK_ENTRY( VLIMIT_ANON ) |
52 + MASK_ENTRY( VLIMIT_SHMEM ) |
53 + MASK_ENTRY( VLIMIT_DENTRY ) |
54 + 0
55 +};
56 + /* accounting only */
57 +uint32_t account_mask =
58 + MASK_ENTRY( VLIMIT_SEMARY ) |
59 + MASK_ENTRY( VLIMIT_NSEMS ) |
60 + 0;
61 +
62 +
63 +static int is_valid_vlimit(int id)
64 +{
65 + uint32_t mask = vlimit_mask.minimum |
66 + vlimit_mask.softlimit | vlimit_mask.maximum;
67 + return mask & (1 << id);
68 +}
69 +
70 +static int is_accounted_vlimit(int id)
71 +{
72 + if (is_valid_vlimit(id))
73 + return 1;
74 + return account_mask & (1 << id);
75 }
76
77 +
78 static inline uint64_t vc_get_soft(struct vx_info *vxi, int id)
79 {
80 rlim_t limit = __rlim_soft(&vxi->limit, id);
81 @@ -81,7 +103,7 @@ static inline uint64_t vc_get_hard(struc
82 static int do_get_rlimit(struct vx_info *vxi, uint32_t id,
83 uint64_t *minimum, uint64_t *softlimit, uint64_t *maximum)
84 {
85 - if (!is_valid_rlimit(id))
86 + if (!is_valid_vlimit(id))
87 return -EINVAL;
88
89 if (minimum)
90 @@ -114,7 +136,7 @@ int vc_get_rlimit(struct vx_info *vxi, v
91 static int do_set_rlimit(struct vx_info *vxi, uint32_t id,
92 uint64_t minimum, uint64_t softlimit, uint64_t maximum)
93 {
94 - if (!is_valid_rlimit(id))
95 + if (!is_valid_vlimit(id))
96 return -EINVAL;
97
98 if (maximum != CRLIM_KEEP)
99 @@ -176,26 +198,7 @@ int vc_get_rlimit_x32(struct vx_info *vx
100
101 int vc_get_rlimit_mask(uint32_t id, void __user *data)
102 {
103 - static struct vcmd_ctx_rlimit_mask_v0 mask = {
104 - /* minimum */
105 - 0
106 - , /* softlimit */
107 - (1 << RLIMIT_RSS) |
108 - (1 << VLIMIT_ANON) |
109 - 0
110 - , /* maximum */
111 - (1 << RLIMIT_RSS) |
112 - (1 << RLIMIT_NPROC) |
113 - (1 << RLIMIT_NOFILE) |
114 - (1 << RLIMIT_MEMLOCK) |
115 - (1 << RLIMIT_LOCKS) |
116 - (1 << RLIMIT_AS) |
117 - (1 << VLIMIT_ANON) |
118 - (1 << VLIMIT_DENTRY) |
119 - 0
120 - };
121 -
122 - if (copy_to_user(data, &mask, sizeof(mask)))
123 + if (copy_to_user(data, &vlimit_mask, sizeof(vlimit_mask)))
124 return -EFAULT;
125 return 0;
126 }
127 @@ -231,7 +234,7 @@ int vc_rlimit_stat(struct vx_info *vxi,
128 return -EFAULT;
129
130 id = vc_data.id;
131 - if (!is_valid_rlimit(id))
132 + if (!is_accounted_vlimit(id))
133 return -EINVAL;
134
135 vc_data.hits = atomic_read(&__rlim_lhit(limit, id));

  ViewVC Help
Powered by ViewVC 1.1.20