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
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
kernel
/
vserver
/
inode.c
diff --git
a/kernel/vserver/inode.c
b/kernel/vserver/inode.c
index
05919b0
..
39a26b7
100644
(file)
--- a/
kernel/vserver/inode.c
+++ b/
kernel/vserver/inode.c
@@
-41,7
+41,7
@@
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 (S_ISDIR(in->i_mode))
*mask |= IATTR_BARRIER;
- if (
in->i_sb->s_flags & MS_TAGXID
) {
+ if (
IS_TAGXID(in)
) {
*xid = in->i_xid;
*mask |= IATTR_XID;
}
*xid = in->i_xid;
*mask |= IATTR_XID;
}
@@
-138,12
+138,12
@@
static int __vc_set_iattr(struct dentry *de, uint32_t *xid, uint32_t *flags, uin
if ((*mask & IATTR_FLAGS) && !is_proc)
return -EINVAL;
if ((*mask & IATTR_FLAGS) && !is_proc)
return -EINVAL;
- has_xid =
(in->i_sb->s_flags & MS_TAGXID
) ||
+ has_xid =
IS_TAGXID(in
) ||
(in->i_sb->s_magic == DEVPTS_SUPER_MAGIC);
if ((*mask & IATTR_XID) && !has_xid)
return -EINVAL;
(in->i_sb->s_magic == DEVPTS_SUPER_MAGIC);
if ((*mask & IATTR_XID) && !has_xid)
return -EINVAL;
-
down(&in->i_sem
);
+
mutex_lock(&in->i_mutex
);
if (*mask & IATTR_XID) {
attr.ia_xid = *xid;
attr.ia_valid |= ATTR_XID;
if (*mask & IATTR_XID) {
attr.ia_xid = *xid;
attr.ia_valid |= ATTR_XID;
@@
-161,30
+161,28
@@
static int __vc_set_iattr(struct dentry *de, uint32_t *xid, uint32_t *flags, uin
}
if (*mask & (IATTR_BARRIER | IATTR_IUNLINK | IATTR_IMMUTABLE)) {
}
if (*mask & (IATTR_BARRIER | IATTR_IUNLINK | IATTR_IMMUTABLE)) {
-
- attr.ia_valid |= ATTR_ATTR_FLAG;
- attr.ia_attr_flags =
- (IS_IMMUTABLE(in) ? ATTR_FLAG_IMMUTABLE : 0) |
- (IS_IUNLINK(in) ? ATTR_FLAG_IUNLINK : 0) |
- (IS_BARRIER(in) ? ATTR_FLAG_BARRIER : 0);
-
if (*mask & IATTR_IMMUTABLE) {
if (*flags & IATTR_IMMUTABLE)
if (*mask & IATTR_IMMUTABLE) {
if (*flags & IATTR_IMMUTABLE)
-
attr.ia_attr_flags |= ATTR_FLAG
_IMMUTABLE;
+
in->i_flags |= S
_IMMUTABLE;
else
else
-
attr.ia_attr_flags &= ~ATTR_FLAG
_IMMUTABLE;
+
in->i_flags &= ~S
_IMMUTABLE;
}
if (*mask & IATTR_IUNLINK) {
if (*flags & IATTR_IUNLINK)
}
if (*mask & IATTR_IUNLINK) {
if (*flags & IATTR_IUNLINK)
-
attr.ia_attr_flags |= ATTR_FLAG
_IUNLINK;
+
in->i_flags |= S
_IUNLINK;
else
else
-
attr.ia_attr_flags &= ~ATTR_FLAG
_IUNLINK;
+
in->i_flags &= ~S
_IUNLINK;
}
if (S_ISDIR(in->i_mode) && (*mask & IATTR_BARRIER)) {
if (*flags & IATTR_BARRIER)
}
if (S_ISDIR(in->i_mode) && (*mask & IATTR_BARRIER)) {
if (*flags & IATTR_BARRIER)
-
attr.ia_attr_flags |= ATTR_FLAG
_BARRIER;
+
in->i_flags |= S
_BARRIER;
else
else
- attr.ia_attr_flags &= ~ATTR_FLAG_BARRIER;
+ in->i_flags &= ~S_BARRIER;
+ }
+ if (in->i_op && in->i_op->sync_flags) {
+ error = in->i_op->sync_flags(in);
+ if (error)
+ goto out;
}
}
}
}
@@
-198,8
+196,9
@@
static int __vc_set_iattr(struct dentry *de, uint32_t *xid, uint32_t *flags, uin
}
}
}
}
- up(&in->i_sem);
- return 0;
+out:
+ mutex_unlock(&in->i_mutex);
+ return error;
}
int vc_set_iattr(uint32_t id, void __user *data)
}
int vc_set_iattr(uint32_t id, void __user *data)
@@
-276,7
+275,7
@@
int vx_proc_ioctl(struct inode * inode, struct file * filp,
error = -EPERM;
flags = entry->vx_flags;
if (capable(CAP_CONTEXT))
error = -EPERM;
flags = entry->vx_flags;
if (capable(CAP_CONTEXT))
- error = put_user(flags, (int *) arg);
+ error = put_user(flags, (int
__user
*) arg);
break;
}
case FIOC_SETXFLG: {
break;
}
case FIOC_SETXFLG: {
@@
-288,7
+287,7
@@
int vx_proc_ioctl(struct inode * inode, struct file * filp,
if (IS_RDONLY(inode))
break;
error = -EFAULT;
if (IS_RDONLY(inode))
break;
error = -EFAULT;
- if (get_user(flags, (int *) arg))
+ if (get_user(flags, (int
__user
*) arg))
break;
error = 0;
entry->vx_flags = flags;
break;
error = 0;
entry->vx_flags = flags;