Files linux-2.6.8.1-vs1.9.2.20.5/include/linux/vserver/.context.h.swp and linux-2.6.8.1-vs1.9.2.20.6/include/linux/vserver/.context.h.swp differ diff -NurpP --minimal linux-2.6.8.1-vs1.9.2.20.5/include/linux/vserver/debug.h linux-2.6.8.1-vs1.9.2.20.6/include/linux/vserver/debug.h --- linux-2.6.8.1-vs1.9.2.20.5/include/linux/vserver/debug.h 2004-08-24 05:50:23.000000000 +0200 +++ linux-2.6.8.1-vs1.9.2.20.6/include/linux/vserver/debug.h 2004-08-24 07:37:12.000000000 +0200 @@ -55,6 +55,10 @@ struct _vxhe_get_put { enum { VXH_GET_VX_INFO=1, VXH_PUT_VX_INFO, + VXH_SET_VX_INFO, + VXH_CLR_VX_INFO, + VXH_ALLOC_VX_INFO, + VXH_DEALLOC_VX_INFO, }; struct _vx_hist_entry { @@ -97,5 +101,51 @@ static inline void vxh_put_vx_info(struc entry->type = VXH_PUT_VX_INFO; } +static inline void vxh_set_vx_info(struct vx_info *vxi, void *data) +{ + struct _vx_hist_entry *entry = vxh_advance(VXH_HERE()); + + entry->gp.vxi = vxi; + entry->gp.data = data; + entry->gp.usecnt = atomic_read(&vxi->vx_usecnt); + entry->gp.refcnt = atomic_read(&vxi->vx_refcnt); + entry->gp.xid = vxi->vx_id; + entry->type = VXH_SET_VX_INFO; +} + +static inline void vxh_clr_vx_info(struct vx_info *vxi, void *data) +{ + struct _vx_hist_entry *entry = vxh_advance(VXH_HERE()); + + entry->gp.vxi = vxi; + entry->gp.data = data; + entry->gp.usecnt = atomic_read(&vxi->vx_usecnt); + entry->gp.refcnt = atomic_read(&vxi->vx_refcnt); + entry->gp.xid = vxi->vx_id; + entry->type = VXH_CLR_VX_INFO; +} + +static inline void vxh_alloc_vx_info(struct vx_info *vxi) +{ + struct _vx_hist_entry *entry = vxh_advance(VXH_HERE()); + + entry->gp.vxi = vxi; + entry->gp.usecnt = atomic_read(&vxi->vx_usecnt); + entry->gp.refcnt = atomic_read(&vxi->vx_refcnt); + entry->gp.xid = vxi->vx_id; + entry->type = VXH_ALLOC_VX_INFO; +} + +static inline void vxh_dealloc_vx_info(struct vx_info *vxi) +{ + struct _vx_hist_entry *entry = vxh_advance(VXH_HERE()); + + entry->gp.vxi = vxi; + entry->gp.usecnt = atomic_read(&vxi->vx_usecnt); + entry->gp.refcnt = atomic_read(&vxi->vx_refcnt); + entry->gp.xid = vxi->vx_id; + entry->type = VXH_DEALLOC_VX_INFO; +} + #endif /* _VX_DEBUG_H */ diff -NurpP --minimal linux-2.6.8.1-vs1.9.2.20.5/kernel/fork.c linux-2.6.8.1-vs1.9.2.20.6/kernel/fork.c --- linux-2.6.8.1-vs1.9.2.20.5/kernel/fork.c 2004-08-20 22:13:11.000000000 +0200 +++ linux-2.6.8.1-vs1.9.2.20.6/kernel/fork.c 2004-08-24 06:50:56.000000000 +0200 @@ -420,10 +420,10 @@ static struct mm_struct * mm_init(struct mm->ioctx_list = NULL; mm->default_kioctx = (struct kioctx)INIT_KIOCTX(mm->default_kioctx, *mm); mm->free_area_cache = TASK_UNMAPPED_BASE; + mm->mm_vx_info = NULL; if (likely(!mm_alloc_pgd(mm))) { mm->def_flags = 0; - set_vx_info(&mm->mm_vx_info, current->vx_info); return mm; } free_mm(mm); @@ -441,6 +441,7 @@ struct mm_struct * mm_alloc(void) if (mm) { memset(mm, 0, sizeof(*mm)); mm = mm_init(mm); + set_vx_info(&mm->mm_vx_info, current->vx_info); } return mm; } @@ -570,13 +571,14 @@ static int copy_mm(unsigned long clone_f /* Copy the current MM stuff.. */ memcpy(mm, oldmm, sizeof(*mm)); - mm->mm_vx_info = NULL; if (!mm_init(mm)) goto fail_nomem; if (init_new_context(tsk,mm)) goto fail_nocontext; + // set_vx_info(&mm->mm_vx_info, oldmm->mm_vx_info); + set_vx_info(&mm->mm_vx_info, current->vx_info); retval = dup_mmap(mm, oldmm); if (retval) goto free_pt; diff -NurpP --minimal linux-2.6.8.1-vs1.9.2.20.5/kernel/vserver/context.c linux-2.6.8.1-vs1.9.2.20.6/kernel/vserver/context.c --- linux-2.6.8.1-vs1.9.2.20.5/kernel/vserver/context.c 2004-08-23 23:27:55.000000000 +0200 +++ linux-2.6.8.1-vs1.9.2.20.6/kernel/vserver/context.c 2004-08-24 07:36:21.000000000 +0200 @@ -62,6 +62,8 @@ static struct vx_info *__alloc_vx_info(x new->vx_bcaps = CAP_INIT_EFF_SET; new->vx_ccaps = 0; + vxh_alloc_vx_info(new); + vxdprintk(VXD_CBIT(xid, 0), "alloc_vx_info(%d) = %p", xid, new); return new; @@ -76,6 +78,8 @@ static void __dealloc_vx_info(struct vx_ vxdprintk(VXD_CBIT(xid, 0), "dealloc_vx_info(%p)", vxi); + vxh_dealloc_vx_info(vxi); + vxi->vx_hlist.next = LIST_POISON1; vxi->vx_id = -1; diff -NurpP --minimal linux-2.6.8.1-vs1.9.2.20.5/kernel/vserver/debug.c linux-2.6.8.1-vs1.9.2.20.6/kernel/vserver/debug.c --- linux-2.6.8.1-vs1.9.2.20.5/kernel/vserver/debug.c 2004-08-24 05:39:27.000000000 +0200 +++ linux-2.6.8.1-vs1.9.2.20.6/kernel/vserver/debug.c 2004-08-24 07:37:50.000000000 +0200 @@ -58,6 +58,20 @@ void vxh_dump_entry(struct _vx_hist_entr e->gp.vxi, e->gp.xid, e->gp.usecnt, e->gp.refcnt, e->seq, cpu); break; + case VXH_SET_VX_INFO: + case VXH_CLR_VX_INFO: + printk(" - %p: %s_vx_info %p[#%d,%d.%d] (#%04x,*%d) @%p\n", e->loc, + (e->type==VXH_SET_VX_INFO)?"set":"clr", + e->gp.vxi, e->gp.xid, e->gp.usecnt, e->gp.refcnt, + e->seq, cpu, e->gp.data); + break; + case VXH_ALLOC_VX_INFO: + case VXH_DEALLOC_VX_INFO: + printk(" - %p: %s_vx_info %p[#%d,%d.%d] (#%04x,*%d)\n", e->loc, + (e->type==VXH_ALLOC_VX_INFO)?"alloc":"dealloc", + e->gp.vxi, e->gp.xid, e->gp.usecnt, e->gp.refcnt, + e->seq, cpu); + break; } }