This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / kernel / vserver / cacct.c
1 /*
2  *  linux/kernel/vserver/cacct.c
3  *
4  *  Virtual Server: Context Accounting
5  *
6  *  Copyright (C) 2006-2007 Herbert Pƶtzl
7  *
8  *  V0.01  added accounting stats
9  *
10  */
11
12 #include <linux/types.h>
13 #include <linux/sched.h>
14 #include <linux/vs_context.h>
15 #include <linux/vserver/switch.h>
16 #include <linux/vserver/cacct_cmd.h>
17 #include <linux/vserver/cacct_int.h>
18
19 #include <asm/errno.h>
20 #include <asm/uaccess.h>
21
22
23 int vc_sock_stat(struct vx_info *vxi, void __user *data)
24 {
25         struct vcmd_sock_stat_v0 vc_data;
26         int j, field;
27
28         if (copy_from_user (&vc_data, data, sizeof(vc_data)))
29                 return -EFAULT;
30
31         field = vc_data.field;
32         if ((field < 0) || (field >= VXA_SOCK_SIZE))
33                 return -EINVAL;
34
35         for (j=0; j<3; j++) {
36                 vc_data.count[j] = vx_sock_count(&vxi->cacct, field, j);
37                 vc_data.total[j] = vx_sock_total(&vxi->cacct, field, j);
38         }
39
40         if (copy_to_user (data, &vc_data, sizeof(vc_data)))
41                 return -EFAULT;
42         return 0;
43 }
44