-#ifndef _LINUX_VXID_H_
-#define _LINUX_VXID_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 INOXID_UID(uid, gid) (uid)
-#define INOXID_GID(uid, gid) (gid)
-#define INOXID_XID(uid, gid, xid) (0)
+#define MAX_UID 0xFFFFFFFF
+#define MAX_GID 0xFFFFFFFF
-#define XIDINO_UID(uid, xid) (uid)
-#define XIDINO_GID(gid, xid) (gid)
+#define INOXID_XID(tag, uid, gid, xid) (0)
-#define MAX_UID 0xFFFFFFFF
-#define MAX_GID 0xFFFFFFFF
+#define XIDINO_UID(tag, uid, xid) (uid)
+#define XIDINO_GID(tag, gid, xid) (gid)
#endif
+
#ifdef CONFIG_INOXID_GID16
-#define INOXID_UID(uid, gid) (uid)
-#define INOXID_GID(uid, gid) ((gid) & 0xFFFF)
-#define INOXID_XID(uid, gid, xid) (((gid) >> 16) & 0xFFFF)
+#define MAX_UID 0xFFFFFFFF
+#define MAX_GID 0x0000FFFF
+
+#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_UGID24
+
+#define MAX_UID 0x00FFFFFF
+#define MAX_GID 0x00FFFFFF
+
+#define INOXID_XID(tag, uid, gid, xid) \
+ ((tag) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
+
+#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))
-#define XIDINO_UID(uid, xid) (uid)
-#define XIDINO_GID(gid, xid) (((gid) & 0xFFFF) | ((xid) << 16))
+#endif
+
+
+#ifdef CONFIG_INOXID_UID16
+
+#define MAX_UID 0x0000FFFF
+#define MAX_GID 0xFFFFFFFF
-#define MAX_UID 0xFFFFFFFF
-#define MAX_GID 0x0000FFFF
+#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_GID24
-#define INOXID_UID(uid, gid) ((uid) & 0xFFFFFF)
-#define INOXID_GID(uid, gid) ((gid) & 0xFFFFFF)
-#define INOXID_XID(uid, gid, xid) ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF))
+#ifdef CONFIG_INOXID_INTERN
+
+#define MAX_UID 0xFFFFFFFF
+#define MAX_GID 0xFFFFFFFF
-#define XIDINO_UID(uid, xid) (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16))
-#define XIDINO_GID(gid, xid) (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24))
+#define INOXID_XID(tag, uid, gid, xid) \
+ ((tag) ? (xid) : 0)
-#define MAX_UID 0x00FFFFFF
-#define MAX_GID 0x00FFFFFF
+#define XIDINO_UID(tag, uid, xid) (uid)
+#define XIDINO_GID(tag, gid, xid) (gid)
#endif
-#ifdef CONFIG_INOXID_GID32
-#define INOXID_UID(uid, gid) (uid)
-#define INOXID_GID(uid, gid) (gid)
-#define INOXID_XID(uid, gid, xid) (xid)
+#ifdef CONFIG_INOXID_RUNTIME
+
+#define MAX_UID 0xFFFFFFFF
+#define MAX_GID 0xFFFFFFFF
-#define XIDINO_UID(uid, xid) (uid)
-#define XIDINO_GID(gid, xid) (gid)
+#define INOXID_XID(tag, uid, gid, xid) (0)
-#define MAX_UID 0xFFFFFFFF
-#define MAX_GID 0xFFFFFFFF
+#define XIDINO_UID(tag, uid, xid) (uid)
+#define XIDINO_GID(tag, gid, xid) (gid)
#endif
-#define FIOC_GETXID _IOR('x', 1, long)
-#define FIOC_SETXID _IOW('x', 2, long)
-#define FIOC_SETXIDJ _IOW('x', 3, long)
+#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)
+{
+ if ((uid > MAX_UID) && (uid != -1))
+ uid = -2;
+ return (uid & MAX_UID);
+}
+
+static inline gid_t vx_map_gid(gid_t gid)
+{
+ if ((gid > MAX_GID) && (gid != -1))
+ gid = -2;
+ return (gid & MAX_GID);
+}
+
+
+#ifdef CONFIG_VSERVER_LEGACY
+#define FIOC_GETXID _IOR('x', 1, long)
+#define FIOC_SETXID _IOW('x', 2, long)
+#define FIOC_SETXIDJ _IOW('x', 3, long)
#endif
+
+#endif /* _VX_XID_H */