*
* Virtual Server: File System Support
*
- * Copyright (C) 2004-2005 Herbert Pötzl
+ * Copyright (C) 2004-2007 Herbert Pötzl
*
* V0.01 separated from vcontext V0.05
*
*/
#include <linux/sched.h>
-#include <linux/vs_context.h>
#include <linux/proc_fs.h>
#include <linux/devpts_fs.h>
#include <linux/namei.h>
#include <linux/compat.h>
#include <linux/vserver/inode.h>
#include <linux/vserver/inode_cmd.h>
-#include <linux/vserver/xid.h>
+#include <linux/vs_base.h>
+#include <linux/vs_tag.h>
#include <asm/errno.h>
#include <asm/uaccess.h>
-static int __vc_get_iattr(struct inode *in, uint32_t *xid, uint32_t *flags, uint32_t *mask)
+static int __vc_get_iattr(struct inode *in, uint32_t *tag, uint32_t *flags, uint32_t *mask)
{
struct proc_dir_entry *entry;
if (!in || !in->i_sb)
return -ESRCH;
- *flags = IATTR_XID
+ *flags = IATTR_TAG
| (IS_BARRIER(in) ? IATTR_BARRIER : 0)
| (IS_IUNLINK(in) ? IATTR_IUNLINK : 0)
| (IS_IMMUTABLE(in) ? IATTR_IMMUTABLE : 0);
if (S_ISDIR(in->i_mode))
*mask |= IATTR_BARRIER;
- if (IS_TAGXID(in)) {
- *xid = in->i_xid;
- *mask |= IATTR_XID;
+ if (IS_TAGGED(in)) {
+ *tag = in->i_tag;
+ *mask |= IATTR_TAG;
}
switch (in->i_sb->s_magic) {
break;
case DEVPTS_SUPER_MAGIC:
- *xid = in->i_xid;
- *mask |= IATTR_XID;
+ *tag = in->i_tag;
+ *mask |= IATTR_TAG;
break;
default:
struct vcmd_ctx_iattr_v1 vc_data = { .xid = -1 };
int ret;
- if (!vx_check(0, VX_ADMIN))
- return -ENOSYS;
if (copy_from_user (&vc_data, data, sizeof(vc_data)))
return -EFAULT;
struct vcmd_ctx_iattr_v1_x32 vc_data = { .xid = -1 };
int ret;
- if (!vx_check(0, VX_ADMIN))
+ if (!vx_check(0, VS_ADMIN))
return -ENOSYS;
if (copy_from_user (&vc_data, data, sizeof(vc_data)))
return -EFAULT;
#endif /* CONFIG_COMPAT */
-static int __vc_set_iattr(struct dentry *de, uint32_t *xid, uint32_t *flags, uint32_t *mask)
+static int __vc_set_iattr(struct dentry *de, uint32_t *tag, uint32_t *flags, uint32_t *mask)
{
struct inode *in = de->d_inode;
- int error = 0, is_proc = 0, has_xid = 0;
+ int error = 0, is_proc = 0, has_tag = 0;
struct iattr attr = { 0 };
if (!in || !in->i_sb)
if ((*mask & IATTR_FLAGS) && !is_proc)
return -EINVAL;
- has_xid = IS_TAGXID(in) ||
+ has_tag = IS_TAGGED(in) ||
(in->i_sb->s_magic == DEVPTS_SUPER_MAGIC);
- if ((*mask & IATTR_XID) && !has_xid)
+ if ((*mask & IATTR_TAG) && !has_tag)
return -EINVAL;
mutex_lock(&in->i_mutex);
- if (*mask & IATTR_XID) {
- attr.ia_xid = *xid;
- attr.ia_valid |= ATTR_XID;
+ if (*mask & IATTR_TAG) {
+ attr.ia_tag = *tag;
+ attr.ia_valid |= ATTR_TAG;
}
if (*mask & IATTR_FLAGS) {
struct vcmd_ctx_iattr_v1 vc_data;
int ret;
- if (!capable(CAP_SYS_ADMIN) || !capable(CAP_LINUX_IMMUTABLE))
+ if (!capable(CAP_LINUX_IMMUTABLE))
return -EPERM;
if (copy_from_user (&vc_data, data, sizeof(vc_data)))
return -EFAULT;
struct vcmd_ctx_iattr_v1_x32 vc_data;
int ret;
- if (!capable(CAP_SYS_ADMIN) || !capable(CAP_LINUX_IMMUTABLE))
+ if (!capable(CAP_LINUX_IMMUTABLE))
return -EPERM;
if (copy_from_user (&vc_data, data, sizeof(vc_data)))
return -EFAULT;
}
return error;
}
-#endif
+#endif /* CONFIG_VSERVER_LEGACY */
+#ifdef CONFIG_PROPAGATE
-int vx_parse_xid(char *string, xid_t *xid, int remove)
+int dx_parse_tag(char *string, tag_t *tag, int remove)
{
static match_table_t tokens = {
- {1, "xid=%u"},
+ {1, "tagid=%u"},
{0, NULL}
};
substring_t args[MAX_OPT_ARGS];
return 0;
token = match_token(string, tokens, args);
- if (token && xid && !match_int(args, &option))
- *xid = option;
+ if (token && tag && !match_int(args, &option))
+ *tag = option;
- vxdprintk(VXD_CBIT(xid, 7),
- "vx_parse_xid(»%s«): %d:#%d",
+ vxdprintk(VXD_CBIT(tag, 7),
+ "dx_parse_tag(»%s«): %d:#%d",
string, token, option);
- if (token && remove) {
- char *p = strstr(string, "xid=");
+ if ((token == 1) && remove) {
+ char *p = strstr(string, "tagid=");
char *q = p;
if (p) {
return token;
}
-void vx_propagate_xid(struct nameidata *nd, struct inode *inode)
+void __dx_propagate_tag(struct nameidata *nd, struct inode *inode)
{
- xid_t new_xid = 0;
+ tag_t new_tag = 0;
struct vfsmount *mnt;
int propagate;
if (!mnt)
return;
- propagate = (mnt->mnt_flags & MNT_XID);
+ propagate = (mnt->mnt_flags & MNT_TAGID);
if (propagate)
- new_xid = mnt->mnt_xid;
+ new_tag = mnt->mnt_tag;
- vxdprintk(VXD_CBIT(xid, 7),
- "vx_propagate_xid(%p[#%lu.%d]): %d,%d",
- inode, inode->i_ino, inode->i_xid,
- new_xid, (propagate)?1:0);
+ vxdprintk(VXD_CBIT(tag, 7),
+ "dx_propagate_tag(%p[#%lu.%d]): %d,%d",
+ inode, inode->i_ino, inode->i_tag,
+ new_tag, (propagate)?1:0);
if (propagate)
- inode->i_xid = new_xid;
+ inode->i_tag = new_tag;
}
#include <linux/module.h>
-EXPORT_SYMBOL_GPL(vx_propagate_xid);
+EXPORT_SYMBOL_GPL(__dx_propagate_tag);
+
+#endif /* CONFIG_PROPAGATE */