X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Finode.c;h=274d05eb00719d65930cb0f4061f34b93d36b396;hb=refs%2Fheads%2Fvserver;hp=39a26b7248eb5c57d9286149f9a69bff2d8096e1;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git diff --git a/kernel/vserver/inode.c b/kernel/vserver/inode.c index 39a26b724..274d05eb0 100644 --- a/kernel/vserver/inode.c +++ b/kernel/vserver/inode.c @@ -3,14 +3,13 @@ * * 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 -#include #include #include #include @@ -19,20 +18,21 @@ #include #include #include -#include +#include +#include #include #include -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); @@ -41,9 +41,9 @@ static int __vc_get_iattr(struct inode *in, uint32_t *xid, uint32_t *flags, uint 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) { @@ -60,8 +60,8 @@ static int __vc_get_iattr(struct inode *in, uint32_t *xid, uint32_t *flags, uint break; case DEVPTS_SUPER_MAGIC: - *xid = in->i_xid; - *mask |= IATTR_XID; + *tag = in->i_tag; + *mask |= IATTR_TAG; break; default: @@ -76,8 +76,6 @@ int vc_get_iattr(uint32_t id, void __user *data) 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; @@ -103,7 +101,7 @@ int vc_get_iattr_x32(uint32_t id, void __user *data) 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; @@ -125,10 +123,10 @@ int vc_get_iattr_x32(uint32_t id, void __user *data) #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) @@ -138,15 +136,15 @@ static int __vc_set_iattr(struct dentry *de, uint32_t *xid, uint32_t *flags, uin 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) { @@ -207,7 +205,7 @@ int vc_set_iattr(uint32_t id, void __user *data) 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; @@ -232,7 +230,7 @@ int vc_set_iattr_x32(uint32_t id, void __user *data) 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; @@ -298,13 +296,14 @@ int vx_proc_ioctl(struct inode * inode, struct file * filp, } 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]; @@ -314,15 +313,15 @@ int vx_parse_xid(char *string, xid_t *xid, int remove) 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) { @@ -337,9 +336,9 @@ int vx_parse_xid(char *string, xid_t *xid, int remove) 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; @@ -349,20 +348,22 @@ void vx_propagate_xid(struct nameidata *nd, struct inode *inode) 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 -EXPORT_SYMBOL_GPL(vx_propagate_xid); +EXPORT_SYMBOL_GPL(__dx_propagate_tag); + +#endif /* CONFIG_PROPAGATE */