#ifndef _VX_XID_H
#define _VX_XID_H
+#include <linux/config.h>
-#define XID_TAG(in) (!(in) || \
- (((struct inode *)in)->i_sb && \
- (((struct inode *)in)->i_sb->s_flags & MS_TAGXID)))
+
+#define XID_TAG(in) (IS_TAGXID(in))
+
+
+#ifdef CONFIG_XID_TAG_NFSD
+#define XID_TAG_NFSD 1
+#else
+#define XID_TAG_NFSD 0
+#endif
#ifdef CONFIG_INOXID_NONE
#define MAX_GID 0xFFFFFFFF
#define INOXID_XID(tag, uid, gid, xid) \
- ((tag) ? ((uid) >> 16) & 0xFFFF) : 0)
+ ((tag) ? (((uid) >> 16) & 0xFFFF) : 0)
#define XIDINO_UID(tag, uid, xid) \
((tag) ? (((uid) & 0xFFFF) | ((xid) << 16)) : (uid))
#endif
+#ifndef CONFIG_INOXID_NONE
+#define vx_current_fsxid(sb) \
+ ((sb)->s_flags & MS_TAGXID ? current->xid : 0)
+#else
+#define vx_current_fsxid(sb) (0)
+#endif
+
+#ifndef CONFIG_INOXID_INTERN
+#define XIDINO_XID(tag, xid) (0)
+#else
+#define XIDINO_XID(tag, xid) ((tag) ? (xid) : 0)
+#endif
+
#define INOXID_UID(tag, uid, gid) \
((tag) ? ((uid) & MAX_UID) : (uid))
#define INOXID_GID(tag, uid, gid) \
}
-#ifdef CONFIG_VSERVER_LEGACY
+#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
+int vx_parse_xid(char *string, xid_t *xid, int remove);
+void vx_propagate_xid(struct nameidata *nd, struct inode *inode);
+
#endif /* _VX_XID_H */