git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag
[linux-2.6.git]
/
kernel
/
vserver
/
context.c
diff --git
a/kernel/vserver/context.c
b/kernel/vserver/context.c
index
a1860ef
..
533e104
100644
(file)
--- a/
kernel/vserver/context.c
+++ b/
kernel/vserver/context.c
@@
-26,11
+26,6
@@
#include <linux/namespace.h>
#include <linux/rcupdate.h>
#include <linux/namespace.h>
#include <linux/rcupdate.h>
-#define CKRM_VSERVER_INTEGRATION
-#ifdef CKRM_VSERVER_INTEGRATION
-#include <linux/ckrm.h>
-#endif //CKRM_VSERVER_INTEGRATION
-
#include <asm/errno.h>
#include <asm/errno.h>
@@
-43,7
+38,7
@@
static struct vx_info *__alloc_vx_info(xid_t xid)
{
struct vx_info *new = NULL;
{
struct vx_info *new = NULL;
- vxdprintk(
VXD_CBIT(xid, 0), "alloc_vx_info(%d)*
", xid);
+ vxdprintk(
"alloc_vx_info(%d)\n
", xid);
/* would this benefit from a slab cache? */
new = kmalloc(sizeof(struct vx_info), GFP_KERNEL);
/* would this benefit from a slab cache? */
new = kmalloc(sizeof(struct vx_info), GFP_KERNEL);
@@
-67,8
+62,7
@@
static struct vx_info *__alloc_vx_info(xid_t xid)
new->vx_bcaps = CAP_INIT_EFF_SET;
new->vx_ccaps = 0;
new->vx_bcaps = CAP_INIT_EFF_SET;
new->vx_ccaps = 0;
- vxdprintk(VXD_CBIT(xid, 0),
- "alloc_vx_info(%d) = %p", xid, new);
+ vxdprintk("alloc_vx_info(%d) = %p\n", xid, new);
return new;
}
return new;
}
@@
-78,8
+72,7
@@
static struct vx_info *__alloc_vx_info(xid_t xid)
static void __dealloc_vx_info(struct vx_info *vxi)
{
static void __dealloc_vx_info(struct vx_info *vxi)
{
- vxdprintk(VXD_CBIT(xid, 0),
- "dealloc_vx_info(%p)", vxi);
+ vxdprintk("dealloc_vx_info(%p)\n", vxi);
vxi->vx_hlist.next = LIST_POISON1;
vxi->vx_id = -1;
vxi->vx_hlist.next = LIST_POISON1;
vxi->vx_id = -1;
@@
-126,8
+119,7
@@
static inline void __hash_vx_info(struct vx_info *vxi)
{
struct hlist_head *head;
{
struct hlist_head *head;
- vxdprintk(VXD_CBIT(xid, 4),
- "__hash_vx_info: %p[#%d]", vxi, vxi->vx_id);
+ vxdprintk("__hash_vx_info: %p[#%d]\n", vxi, vxi->vx_id);
get_vx_info(vxi);
head = &vx_info_hash[__hashval(vxi->vx_id)];
hlist_add_head_rcu(&vxi->vx_hlist, head);
get_vx_info(vxi);
head = &vx_info_hash[__hashval(vxi->vx_id)];
hlist_add_head_rcu(&vxi->vx_hlist, head);
@@
-140,8
+132,7
@@
static inline void __hash_vx_info(struct vx_info *vxi)
static inline void __unhash_vx_info(struct vx_info *vxi)
{
static inline void __unhash_vx_info(struct vx_info *vxi)
{
- vxdprintk(VXD_CBIT(xid, 4),
- "__unhash_vx_info: %p[#%d]", vxi, vxi->vx_id);
+ vxdprintk("__unhash_vx_info: %p[#%d]\n", vxi, vxi->vx_id);
hlist_del_rcu(&vxi->vx_hlist);
put_vx_info(vxi);
}
hlist_del_rcu(&vxi->vx_hlist);
put_vx_info(vxi);
}
@@
-182,11
+173,8
@@
static inline xid_t __vx_dynamic_id(void)
do {
if (++seq > MAX_S_CONTEXT)
seq = MIN_D_CONTEXT;
do {
if (++seq > MAX_S_CONTEXT)
seq = MIN_D_CONTEXT;
- if (!__lookup_vx_info(seq)) {
- vxdprintk(VXD_CBIT(xid, 4),
- "__vx_dynamic_id: [#%d]", seq);
+ if (!__lookup_vx_info(seq))
return seq;
return seq;
- }
} while (barrier != seq);
return 0;
}
} while (barrier != seq);
return 0;
}
@@
-200,7
+188,7
@@
static struct vx_info * __loc_vx_info(int id, int *err)
{
struct vx_info *new, *vxi = NULL;
{
struct vx_info *new, *vxi = NULL;
- vxdprintk(
VXD_CBIT(xid, 1), "loc_vx_info(%d)*
", id);
+ vxdprintk(
"loc_vx_info(%d)\n
", id);
if (!(new = __alloc_vx_info(id))) {
*err = -ENOMEM;
if (!(new = __alloc_vx_info(id))) {
*err = -ENOMEM;
@@
-222,13
+210,11
@@
static struct vx_info * __loc_vx_info(int id, int *err)
else if ((vxi = __lookup_vx_info(id))) {
/* context in setup is not available */
if (vxi->vx_flags & VXF_STATE_SETUP) {
else if ((vxi = __lookup_vx_info(id))) {
/* context in setup is not available */
if (vxi->vx_flags & VXF_STATE_SETUP) {
- vxdprintk(VXD_CBIT(xid, 0),
- "loc_vx_info(%d) = %p (not available)", id, vxi);
+ vxdprintk("loc_vx_info(%d) = %p (not available)\n", id, vxi);
vxi = NULL;
*err = -EBUSY;
} else {
vxi = NULL;
*err = -EBUSY;
} else {
- vxdprintk(VXD_CBIT(xid, 0),
- "loc_vx_info(%d) = %p (found)", id, vxi);
+ vxdprintk("loc_vx_info(%d) = %p (found)\n", id, vxi);
get_vx_info(vxi);
*err = 0;
}
get_vx_info(vxi);
*err = 0;
}
@@
-236,8
+222,7
@@
static struct vx_info * __loc_vx_info(int id, int *err)
}
/* new context requested */
}
/* new context requested */
- vxdprintk(VXD_CBIT(xid, 0),
- "loc_vx_info(%d) = %p (new)", id, new);
+ vxdprintk("loc_vx_info(%d) = %p (new)\n", id, new);
__hash_vx_info(get_vx_info(new));
vxi = new, new = NULL;
*err = 1;
__hash_vx_info(get_vx_info(new));
vxi = new, new = NULL;
*err = 1;
@@
-255,12
+240,12
@@
out_unlock:
-void rcu_free_vx_info(
struct rcu_head *head
)
+void rcu_free_vx_info(
void *obj
)
{
{
- struct vx_info *vxi =
container_of(head, struct vx_info, vx_rcu)
;
+ struct vx_info *vxi =
obj
;
int usecnt, refcnt;
int usecnt, refcnt;
- BUG_ON(!vxi
|| !head
);
+ BUG_ON(!vxi);
usecnt = atomic_read(&vxi->vx_usecnt);
BUG_ON(usecnt < 0);
usecnt = atomic_read(&vxi->vx_usecnt);
BUG_ON(usecnt < 0);
@@
-268,8
+253,6
@@
void rcu_free_vx_info(struct rcu_head *head)
refcnt = atomic_read(&vxi->vx_refcnt);
BUG_ON(refcnt < 0);
refcnt = atomic_read(&vxi->vx_refcnt);
BUG_ON(refcnt < 0);
- vxdprintk(VXD_CBIT(xid, 3),
- "rcu_free_vx_info(%p): uc=%d", vxi, usecnt);
if (!usecnt)
__dealloc_vx_info(vxi);
else
if (!usecnt)
__dealloc_vx_info(vxi);
else
@@
-402,23
+385,25
@@
void vx_mask_bcaps(struct task_struct *p)
static inline int vx_nofiles_task(struct task_struct *tsk)
{
struct files_struct *files = tsk->files;
static inline int vx_nofiles_task(struct task_struct *tsk)
{
struct files_struct *files = tsk->files;
- const unsigned long *obptr;
+ const unsigned long *obptr
, *cbptr
;
int count, total;
spin_lock(&files->file_lock);
obptr = files->open_fds->fds_bits;
int count, total;
spin_lock(&files->file_lock);
obptr = files->open_fds->fds_bits;
+ cbptr = files->close_on_exec->fds_bits;
count = files->max_fds / (sizeof(unsigned long) * 8);
for (total = 0; count > 0; count--) {
if (*obptr)
total += hweight_long(*obptr);
obptr++;
count = files->max_fds / (sizeof(unsigned long) * 8);
for (total = 0; count > 0; count--) {
if (*obptr)
total += hweight_long(*obptr);
obptr++;
+ /* if (*cbptr)
+ total += hweight_long(*cbptr);
+ cbptr++; */
}
spin_unlock(&files->file_lock);
return total;
}
}
spin_unlock(&files->file_lock);
return total;
}
-#if 0
-
static inline int vx_openfd_task(struct task_struct *tsk)
{
struct files_struct *files = tsk->files;
static inline int vx_openfd_task(struct task_struct *tsk)
{
struct files_struct *files = tsk->files;
@@
-437,8
+422,6
@@
static inline int vx_openfd_task(struct task_struct *tsk)
return total;
}
return total;
}
-#endif
-
/*
* migrate task to new context
* gets vxi, puts old_vxi on change
/*
* migrate task to new context
* gets vxi, puts old_vxi on change
@@
-456,32
+439,26
@@
int vx_migrate_task(struct task_struct *p, struct vx_info *vxi)
if (old_vxi == vxi)
goto out;
if (old_vxi == vxi)
goto out;
- vxdprintk(VXD_CBIT(xid, 5),
- "vx_migrate_task(%p,%p[#%d.%d])", p, vxi,
+ vxdprintk("vx_migrate_task(%p,%p[#%d.%d)\n", p, vxi,
vxi->vx_id, atomic_read(&vxi->vx_usecnt));
if (!(ret = vx_migrate_user(p, vxi))) {
vxi->vx_id, atomic_read(&vxi->vx_usecnt));
if (!(ret = vx_migrate_user(p, vxi))) {
- int nofiles;
+ int
openfd,
nofiles;
task_lock(p);
task_lock(p);
-
//
openfd = vx_openfd_task(p);
+ openfd = vx_openfd_task(p);
nofiles = vx_nofiles_task(p);
if (old_vxi) {
atomic_dec(&old_vxi->cacct.nr_threads);
atomic_dec(&old_vxi->limit.rcur[RLIMIT_NPROC]);
nofiles = vx_nofiles_task(p);
if (old_vxi) {
atomic_dec(&old_vxi->cacct.nr_threads);
atomic_dec(&old_vxi->limit.rcur[RLIMIT_NPROC]);
- atomic_sub(nofiles, &
old_
vxi->limit.rcur[RLIMIT_NOFILE]);
-
// atomic_sub(openfd, &old_
vxi->limit.rcur[RLIMIT_OPENFD]);
+ atomic_sub(nofiles, &vxi->limit.rcur[RLIMIT_NOFILE]);
+
atomic_sub(openfd, &
vxi->limit.rcur[RLIMIT_OPENFD]);
}
atomic_inc(&vxi->cacct.nr_threads);
atomic_inc(&vxi->limit.rcur[RLIMIT_NPROC]);
atomic_add(nofiles, &vxi->limit.rcur[RLIMIT_NOFILE]);
}
atomic_inc(&vxi->cacct.nr_threads);
atomic_inc(&vxi->limit.rcur[RLIMIT_NPROC]);
atomic_add(nofiles, &vxi->limit.rcur[RLIMIT_NOFILE]);
- // atomic_add(openfd, &vxi->limit.rcur[RLIMIT_OPENFD]);
-
- vxdprintk(VXD_CBIT(xid, 5),
- "moved task %p into vxi:%p[#%d]",
- p, vxi, vxi->vx_id);
-
+ atomic_add(openfd, &vxi->limit.rcur[RLIMIT_OPENFD]);
/* should be handled in set_vx_info !! */
if (old_vxi)
clr_vx_info(&p->vx_info);
/* should be handled in set_vx_info !! */
if (old_vxi)
clr_vx_info(&p->vx_info);
@@
-494,15
+471,6
@@
int vx_migrate_task(struct task_struct *p, struct vx_info *vxi)
// put_vx_info(old_vxi);
}
out:
// put_vx_info(old_vxi);
}
out:
-
-
-#ifdef CKRM_VSERVER_INTEGRATION
- do {
- ckrm_cb_xid(p);
- } while (0);
-#endif //CKRM_VSERVER_INTEGRATION
-
-
put_vx_info(old_vxi);
return ret;
}
put_vx_info(old_vxi);
return ret;
}