VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / include / linux / vserver / xid.h
index ba52c25..3472def 100644 (file)
@@ -1,15 +1,21 @@
-#ifndef _LINUX_XID_H_
-#define _LINUX_XID_H_
+#ifndef _VX_XID_H
+#define _VX_XID_H
+
+
+#define        XID_TAG(in)     (!(in) || \
+       (((struct inode *)in)->i_sb && \
+       (((struct inode *)in)->i_sb->s_flags & MS_TAGXID)))
+
 
 #ifdef CONFIG_INOXID_NONE
 
 #define MAX_UID                0xFFFFFFFF
 #define MAX_GID                0xFFFFFFFF
 
-#define INOXID_XID(uid, gid, xid)      (0)
+#define INOXID_XID(tag, uid, gid, xid) (0)
 
-#define XIDINO_UID(uid, xid)           (uid)
-#define XIDINO_GID(gid, xid)           (gid)
+#define XIDINO_UID(tag, uid, xid)      (uid)
+#define XIDINO_GID(tag, gid, xid)      (gid)
 
 #endif
 
 #define MAX_UID                0xFFFFFFFF
 #define MAX_GID                0x0000FFFF
 
-#define INOXID_XID(uid, gid, xid)      (((gid) >> 16) & 0xFFFF)
-
-#define XIDINO_UID(uid, xid)           (uid)
-#define XIDINO_GID(gid, xid)           (((gid) & 0xFFFF) | ((xid) << 16))
+#define INOXID_XID(tag, uid, gid, xid) \
+       ((tag) ? (((gid) >> 16) & 0xFFFF) : 0)
 
+#define XIDINO_UID(tag, uid, xid)      (uid)
+#define XIDINO_GID(tag, gid, xid)      \
+       ((tag) ? (((gid) & 0xFFFF) | ((xid) << 16)) : (gid))
 
 #endif
 
 
-#ifdef CONFIG_INOXID_GID24
+#ifdef CONFIG_INOXID_UGID24
 
 #define MAX_UID                0x00FFFFFF
 #define MAX_GID                0x00FFFFFF
 
-#define INOXID_XID(uid, gid, xid)      ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF))
+#define INOXID_XID(tag, uid, gid, xid) \
+       ((tag) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
 
-#define XIDINO_UID(uid, xid)           (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16))
-#define XIDINO_GID(gid, xid)           (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24))
+#define XIDINO_UID(tag, uid, xid)      \
+       ((tag) ? (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) : (uid))
+#define XIDINO_GID(tag, gid, xid)      \
+       ((tag) ? (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) : (gid))
 
 #endif
 
 
-#ifdef CONFIG_INOXID_GID32
+#ifdef CONFIG_INOXID_UID16
+
+#define MAX_UID                0x0000FFFF
+#define MAX_GID                0xFFFFFFFF
+
+#define INOXID_XID(tag, uid, gid, xid) \
+       ((tag) ? ((uid) >> 16) & 0xFFFF) : 0)
+
+#define XIDINO_UID(tag, uid, xid)      \
+       ((tag) ? (((uid) & 0xFFFF) | ((xid) << 16)) : (uid))
+#define XIDINO_GID(tag, gid, xid)      (gid)
+
+#endif
+
+
+#ifdef CONFIG_INOXID_INTERN
 
 #define MAX_UID                0xFFFFFFFF
 #define MAX_GID                0xFFFFFFFF
 
-#define INOXID_XID(uid, gid, xid)      (xid)
+#define INOXID_XID(tag, uid, gid, xid) \
+       ((tag) ? (xid) : 0)
 
-#define XIDINO_UID(uid, xid)           (uid)
-#define XIDINO_GID(gid, xid)           (gid)
+#define XIDINO_UID(tag, uid, xid)      (uid)
+#define XIDINO_GID(tag, gid, xid)      (gid)
 
 #endif
 
 #define MAX_UID                0xFFFFFFFF
 #define MAX_GID                0xFFFFFFFF
 
-#define INOXID_XID(uid, gid, xid)      (0)
+#define INOXID_XID(tag, uid, gid, xid) (0)
 
-#define XIDINO_UID(uid, xid)           (uid)
-#define XIDINO_GID(gid, xid)           (gid)
+#define XIDINO_UID(tag, uid, xid)      (uid)
+#define XIDINO_GID(tag, gid, xid)      (gid)
 
 #endif
 
 
-#define INOXID_UID(uid, gid)           ((uid) & MAX_UID)
-#define INOXID_GID(uid, gid)           ((gid) & MAX_GID)
+#define INOXID_UID(tag, uid, gid)      \
+       ((tag) ? ((uid) & MAX_UID) : (uid))
+#define INOXID_GID(tag, uid, gid)      \
+       ((tag) ? ((gid) & MAX_GID) : (gid))
+
 
 static inline uid_t vx_map_uid(uid_t uid)
 {
@@ -91,4 +120,4 @@ static inline gid_t vx_map_gid(gid_t gid)
 #define FIOC_SETXIDJ   _IOW('x', 3, long)
 #endif
 
-#endif /* _LINUX_XID_H_ */
+#endif /* _VX_XID_H */