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
vserver 2.0-rc4
[linux-2.6.git]
/
kernel
/
vserver
/
proc.c
diff --git
a/kernel/vserver/proc.c
b/kernel/vserver/proc.c
index
4408810
..
0d67d76
100644
(file)
--- a/
kernel/vserver/proc.c
+++ b/
kernel/vserver/proc.c
@@
-3,7
+3,7
@@
*
* Virtual Context Support
*
*
* Virtual Context Support
*
- * Copyright (C) 2003-200
4
Herbert Pötzl
+ * Copyright (C) 2003-200
5
Herbert Pötzl
*
* V0.01 basic structure
* V0.02 adaptation vs1.3.0
*
* V0.01 basic structure
* V0.02 adaptation vs1.3.0
@@
-18,15
+18,20
@@
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/proc_fs.h>
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/proc_fs.h>
-#include <linux/vserver.h>
-#include <linux/vs_base.h>
+#include <linux/sched.h>
#include <linux/vs_context.h>
#include <linux/vs_network.h>
#include <linux/vs_cvirt.h>
#include <linux/vs_context.h>
#include <linux/vs_network.h>
#include <linux/vs_cvirt.h>
+#include <linux/vserver/switch.h>
+
#include <asm/uaccess.h>
#include <asm/unistd.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
+#include "cvirt_proc.h"
+#include "limit_proc.h"
+#include "sched_proc.h"
+#include "vci_config.h"
static struct proc_dir_entry *proc_virtual;
static struct proc_dir_entry *proc_virtual;
@@
-58,9
+63,11
@@
static int proc_virtual_info(int vid, char *buffer)
return sprintf(buffer,
"VCIVersion:\t%04x:%04x\n"
"VCISyscall:\t%d\n"
return sprintf(buffer,
"VCIVersion:\t%04x:%04x\n"
"VCISyscall:\t%d\n"
+ "VCIKernel:\t%08x\n"
,VCI_VERSION >> 16
,VCI_VERSION & 0xFFFF
,__NR_vserver
,VCI_VERSION >> 16
,VCI_VERSION & 0xFFFF
,__NR_vserver
+ ,vci_kernel_config()
);
}
);
}
@@
-95,13
+102,13
@@
int proc_xid_status (int vid, char *buffer)
return 0;
length = sprintf(buffer,
"UseCnt:\t%d\n"
return 0;
length = sprintf(buffer,
"UseCnt:\t%d\n"
- "
RefCnt
:\t%d\n"
+ "
Tasks
:\t%d\n"
"Flags:\t%016llx\n"
"BCaps:\t%016llx\n"
"CCaps:\t%016llx\n"
"Ticks:\t%d\n"
,atomic_read(&vxi->vx_usecnt)
"Flags:\t%016llx\n"
"BCaps:\t%016llx\n"
"CCaps:\t%016llx\n"
"Ticks:\t%d\n"
,atomic_read(&vxi->vx_usecnt)
- ,atomic_read(&vxi->vx_
refcnt
)
+ ,atomic_read(&vxi->vx_
tasks
)
,(unsigned long long)vxi->vx_flags
,(unsigned long long)vxi->vx_bcaps
,(unsigned long long)vxi->vx_ccaps
,(unsigned long long)vxi->vx_flags
,(unsigned long long)vxi->vx_bcaps
,(unsigned long long)vxi->vx_ccaps
@@
-214,9
+221,9
@@
int proc_nid_status (int vid, char *buffer)
return 0;
length = sprintf(buffer,
"UseCnt:\t%d\n"
return 0;
length = sprintf(buffer,
"UseCnt:\t%d\n"
- "
RefCnt
:\t%d\n"
+ "
Tasks
:\t%d\n"
,atomic_read(&nxi->nx_usecnt)
,atomic_read(&nxi->nx_usecnt)
- ,atomic_read(&nxi->nx_
refcnt
)
+ ,atomic_read(&nxi->nx_
tasks
)
);
put_nx_info(nxi);
return length;
);
put_nx_info(nxi);
return length;
@@
-248,7
+255,6
@@
static struct inode *proc_vid_make_inode(struct super_block * sb,
inode->i_uid = 0;
inode->i_gid = 0;
inode->i_uid = 0;
inode->i_gid = 0;
- // inode->i_xid = xid;
out:
return inode;
}
out:
return inode;
}
@@
-261,10
+267,10
@@
static int proc_vid_revalidate(struct dentry * dentry, struct nameidata *nd)
vid = inode_vid(inode);
switch (inode_type(inode) & PROC_VID_MASK) {
case PROC_XID_INO:
vid = inode_vid(inode);
switch (inode_type(inode) & PROC_VID_MASK) {
case PROC_XID_INO:
- hashed =
vx_info
_is_hashed(vid);
+ hashed =
xid
_is_hashed(vid);
break;
case PROC_NID_INO:
break;
case PROC_NID_INO:
- hashed = n
x_info
_is_hashed(vid);
+ hashed = n
id
_is_hashed(vid);
break;
}
if (hashed)
break;
}
if (hashed)
@@
-273,13
+279,6
@@
static int proc_vid_revalidate(struct dentry * dentry, struct nameidata *nd)
return 0;
}
return 0;
}
-/*
-static int proc_vid_delete_dentry(struct dentry * dentry)
-{
- return 1;
-}
-*/
-
#define PROC_BLOCK_SIZE (PAGE_SIZE - 1024)
#define PROC_BLOCK_SIZE (PAGE_SIZE - 1024)
@@
-289,7
+288,6
@@
static ssize_t proc_vid_info_read(struct file * file, char * buf,
struct inode * inode = file->f_dentry->d_inode;
unsigned long page;
ssize_t length;
struct inode * inode = file->f_dentry->d_inode;
unsigned long page;
ssize_t length;
- ssize_t end;
int vid;
if (count > PROC_BLOCK_SIZE)
int vid;
if (count > PROC_BLOCK_SIZE)
@@
-300,22
+298,11
@@
static ssize_t proc_vid_info_read(struct file * file, char * buf,
vid = inode_vid(inode);
length = PROC_I(inode)->op.proc_vid_read(vid, (char*)page);
vid = inode_vid(inode);
length = PROC_I(inode)->op.proc_vid_read(vid, (char*)page);
- if (length < 0) {
- free_page(page);
- return length;
- }
- /* Static 4kB (or whatever) block capacity */
- if (*ppos >= length) {
- free_page(page);
- return 0;
- }
- if (count + *ppos > length)
- count = length - *ppos;
- end = count + *ppos;
- copy_to_user(buf, (char *) page + *ppos, count);
- *ppos = end;
+ if (length >= 0)
+ length = simple_read_from_buffer(buf, count, ppos,
+ (char *)page, length);
free_page(page);
free_page(page);
- return
count
;
+ return
length
;
}
}
@@
-330,7
+317,6
@@
static struct file_operations proc_vid_info_file_operations = {
static struct dentry_operations proc_vid_dentry_operations = {
d_revalidate: proc_vid_revalidate,
static struct dentry_operations proc_vid_dentry_operations = {
d_revalidate: proc_vid_revalidate,
-// d_delete: proc_vid_delete_dentry,
};
};
@@
-429,7
+415,6
@@
static struct dentry *proc_vid_lookup(struct inode *dir,
return ERR_PTR(-EINVAL);
}
inode->i_mode = p->mode;
return ERR_PTR(-EINVAL);
}
inode->i_mode = p->mode;
-// inode->i_op = &proc_vid_info_inode_operations;
inode->i_fop = &proc_vid_info_file_operations;
inode->i_nlink = 1;
inode->i_flags|=S_IMMUTABLE;
inode->i_fop = &proc_vid_info_file_operations;
inode->i_nlink = 1;
inode->i_flags|=S_IMMUTABLE;
@@
-551,8
+536,6
@@
struct dentry *proc_virtual_lookup(struct inode *dir,
inode->i_ino = fake_ino(1, PROC_XID_INO);
inode->i_mode = S_IFLNK|S_IRWXUGO;
inode->i_uid = inode->i_gid = 0;
inode->i_ino = fake_ino(1, PROC_XID_INO);
inode->i_mode = S_IFLNK|S_IRWXUGO;
inode->i_uid = inode->i_gid = 0;
- inode->i_size = 64;
-// inode->i_op = &proc_current_inode_operations;
d_add(dentry, inode);
return NULL;
}
d_add(dentry, inode);
return NULL;
}
@@
-563,8
+546,6
@@
struct dentry *proc_virtual_lookup(struct inode *dir,
inode->i_fop = &proc_vid_info_file_operations;
PROC_I(inode)->op.proc_vid_read = proc_virtual_info;
inode->i_mode = S_IFREG|S_IRUGO;
inode->i_fop = &proc_vid_info_file_operations;
PROC_I(inode)->op.proc_vid_read = proc_virtual_info;
inode->i_mode = S_IFREG|S_IRUGO;
-// inode->i_size = 64;
-// inode->i_op = &proc_current_inode_operations;
d_add(dentry, inode);
return NULL;
}
d_add(dentry, inode);
return NULL;
}
@@
-621,8
+602,6
@@
struct dentry *proc_vnet_lookup(struct inode *dir,
inode->i_ino = fake_ino(1, PROC_NID_INO);
inode->i_mode = S_IFLNK|S_IRWXUGO;
inode->i_uid = inode->i_gid = 0;
inode->i_ino = fake_ino(1, PROC_NID_INO);
inode->i_mode = S_IFLNK|S_IRWXUGO;
inode->i_uid = inode->i_gid = 0;
- inode->i_size = 64;
-// inode->i_op = &proc_current_inode_operations;
d_add(dentry, inode);
return NULL;
}
d_add(dentry, inode);
return NULL;
}
@@
-633,8
+612,6
@@
struct dentry *proc_vnet_lookup(struct inode *dir,
inode->i_fop = &proc_vid_info_file_operations;
PROC_I(inode)->op.proc_vid_read = proc_vnet_info;
inode->i_mode = S_IFREG|S_IRUGO;
inode->i_fop = &proc_vid_info_file_operations;
PROC_I(inode)->op.proc_vid_read = proc_vnet_info;
inode->i_mode = S_IFREG|S_IRUGO;
-// inode->i_size = 64;
-// inode->i_op = &proc_current_inode_operations;
d_add(dentry, inode);
return NULL;
}
d_add(dentry, inode);
return NULL;
}
@@
-708,7
+685,7
@@
int proc_virtual_readdir(struct file * filp,
filp->f_pos++;
/* fall through */
case 3:
filp->f_pos++;
/* fall through */
case 3:
- if (
current->xid
> 1) {
+ if (
vx_current_xid()
> 1) {
ino = fake_ino(1, PROC_XID_INO);
if (filldir(dirent, "current", 7,
filp->f_pos, ino, DT_LNK) < 0)
ino = fake_ino(1, PROC_XID_INO);
if (filldir(dirent, "current", 7,
filp->f_pos, ino, DT_LNK) < 0)
@@
-776,7
+753,7
@@
int proc_vnet_readdir(struct file * filp,
filp->f_pos++;
/* fall through */
case 3:
filp->f_pos++;
/* fall through */
case 3:
- if (
current->xid
> 1) {
+ if (
vx_current_xid()
> 1) {
ino = fake_ino(1, PROC_NID_INO);
if (filldir(dirent, "current", 7,
filp->f_pos, ino, DT_LNK) < 0)
ino = fake_ino(1, PROC_NID_INO);
if (filldir(dirent, "current", 7,
filp->f_pos, ino, DT_LNK) < 0)
@@
-824,7
+801,7
@@
void proc_vx_init(void)
}
proc_virtual = ent;
}
proc_virtual = ent;
- ent = proc_mkdir("vnet", 0);
+ ent = proc_mkdir("v
irt
net", 0);
if (ent) {
ent->proc_fops = &proc_vnet_dir_operations;
ent->proc_iops = &proc_vnet_dir_inode_operations;
if (ent) {
ent->proc_fops = &proc_vnet_dir_operations;
ent->proc_iops = &proc_vnet_dir_inode_operations;
@@
-838,9
+815,10
@@
void proc_vx_init(void)
/* per pid info */
/* per pid info */
-
char *task
_vx_info(struct task_struct *p, char *buffer)
+
int proc_pid
_vx_info(struct task_struct *p, char *buffer)
{
struct vx_info *vxi;
{
struct vx_info *vxi;
+ char * orig = buffer;
buffer += sprintf (buffer,"XID:\t%d\n", vx_task_xid(p));
vxi = task_get_vx_info(p);
buffer += sprintf (buffer,"XID:\t%d\n", vx_task_xid(p));
vxi = task_get_vx_info(p);
@@
-855,20
+833,14
@@
char *task_vx_info(struct task_struct *p, char *buffer)
,vxi->vx_initpid);
}
put_vx_info(vxi);
,vxi->vx_initpid);
}
put_vx_info(vxi);
- return buffer;
-}
-
-int proc_pid_vx_info(struct task_struct *p, char *buffer)
-{
- char * orig = buffer;
-
- buffer = task_vx_info(p, buffer);
return buffer - orig;
}
return buffer - orig;
}
-char *task_nx_info(struct task_struct *p, char *buffer)
+
+int proc_pid_nx_info(struct task_struct *p, char *buffer)
{
struct nx_info *nxi;
{
struct nx_info *nxi;
+ char * orig = buffer;
buffer += sprintf (buffer,"NID:\t%d\n", nx_task_nid(p));
nxi = task_get_nx_info(p);
buffer += sprintf (buffer,"NID:\t%d\n", nx_task_nid(p));
nxi = task_get_nx_info(p);
@@
-886,14
+858,6
@@
char *task_nx_info(struct task_struct *p, char *buffer)
,NIPQUAD(nxi->v4_bcast));
}
put_nx_info(nxi);
,NIPQUAD(nxi->v4_bcast));
}
put_nx_info(nxi);
- return buffer;
-}
-
-int proc_pid_nx_info(struct task_struct *p, char *buffer)
-{
- char * orig = buffer;
-
- buffer = task_nx_info(p, buffer);
return buffer - orig;
}
return buffer - orig;
}