/[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 - (hide annotations) (download)
Tue Nov 14 17:41:50 2006 UTC (7 years, 7 months ago) by phreak
File size: 3236 byte(s)
Updated patchset for 2.1.1.
1 phreak 526 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