aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/xattr_compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/xattr_compat.h')
-rw-r--r--include/linux/xattr_compat.h120
1 files changed, 93 insertions, 27 deletions
diff --git a/include/linux/xattr_compat.h b/include/linux/xattr_compat.h
index 28eff95fa..eee6c1f94 100644
--- a/include/linux/xattr_compat.h
+++ b/include/linux/xattr_compat.h
@@ -42,25 +42,72 @@ typedef struct xattr_handler xattr_handler_t;
#endif
/*
+ * 3.7 API change,
+ * Preferred XATTR_NAME_* definitions introduced, these are mapped to
+ * the previous definitions for older kernels.
+ */
+#ifndef XATTR_NAME_POSIX_ACL_DEFAULT
+#define XATTR_NAME_POSIX_ACL_DEFAULT POSIX_ACL_XATTR_DEFAULT
+#endif
+
+#ifndef XATTR_NAME_POSIX_ACL_ACCESS
+#define XATTR_NAME_POSIX_ACL_ACCESS POSIX_ACL_XATTR_ACCESS
+#endif
+
+/*
+ * 4.5 API change,
+ */
+#if defined(HAVE_XATTR_LIST_SIMPLE)
+#define ZPL_XATTR_LIST_WRAPPER(fn) \
+static bool \
+fn(struct dentry *dentry) \
+{ \
+ return (!!__ ## fn(dentry->d_inode, NULL, 0, NULL, 0)); \
+}
+/*
+ * 4.4 API change,
+ */
+#elif defined(HAVE_XATTR_LIST_DENTRY)
+#define ZPL_XATTR_LIST_WRAPPER(fn) \
+static size_t \
+fn(struct dentry *dentry, char *list, size_t list_size, \
+ const char *name, size_t name_len, int type) \
+{ \
+ return (__ ## fn(dentry->d_inode, \
+ list, list_size, name, name_len)); \
+}
+/*
* 2.6.33 API change,
- * The xattr_hander->get() callback was changed to take a dentry
- * instead of an inode, and a handler_flags argument was added.
*/
-#ifdef HAVE_DENTRY_XATTR_GET
-#define ZPL_XATTR_GET_WRAPPER(fn) \
-static int \
-fn(struct dentry *dentry, const char *name, void *buffer, size_t size, \
- int unused_handler_flags) \
+#elif defined(HAVE_XATTR_LIST_HANDLER)
+#define ZPL_XATTR_LIST_WRAPPER(fn) \
+static size_t \
+fn(const struct xattr_handler *handler, struct dentry *dentry, \
+ char *list, size_t list_size, const char *name, size_t name_len) \
{ \
- return (__ ## fn(dentry->d_inode, name, buffer, size)); \
+ return (__ ## fn(dentry->d_inode, \
+ list, list_size, name, name_len)); \
+}
+/*
+ * 2.6.32 API
+ */
+#elif defined(HAVE_XATTR_LIST_INODE)
+#define ZPL_XATTR_LIST_WRAPPER(fn) \
+static size_t \
+fn(struct inode *ip, char *list, size_t list_size, \
+ const char *name, size_t name_len) \
+{ \
+ return (__ ## fn(ip, list, list_size, name, name_len)); \
}
+#endif
+
/*
* 4.4 API change,
- * The xattr_hander->get() callback was changed to take a xattr_handler,
+ * The xattr_handler->get() callback was changed to take a xattr_handler,
* and handler_flags argument was removed and should be accessed by
* handler->flags.
*/
-#elif defined(HAVE_HANDLER_XATTR_GET)
+#if defined(HAVE_XATTR_GET_HANDLER)
#define ZPL_XATTR_GET_WRAPPER(fn) \
static int \
fn(const struct xattr_handler *handler, struct dentry *dentry, \
@@ -68,35 +115,38 @@ fn(const struct xattr_handler *handler, struct dentry *dentry, \
{ \
return (__ ## fn(dentry->d_inode, name, buffer, size)); \
}
-#else
+/*
+ * 2.6.33 API change,
+ * The xattr_handler->get() callback was changed to take a dentry
+ * instead of an inode, and a handler_flags argument was added.
+ */
+#elif defined(HAVE_XATTR_GET_DENTRY)
#define ZPL_XATTR_GET_WRAPPER(fn) \
static int \
-fn(struct inode *ip, const char *name, void *buffer, size_t size) \
+fn(struct dentry *dentry, const char *name, void *buffer, size_t size, \
+ int unused_handler_flags) \
{ \
- return (__ ## fn(ip, name, buffer, size)); \
+ return (__ ## fn(dentry->d_inode, name, buffer, size)); \
}
-#endif /* HAVE_DENTRY_XATTR_GET */
-
/*
- * 2.6.33 API change,
- * The xattr_hander->set() callback was changed to take a dentry
- * instead of an inode, and a handler_flags argument was added.
+ * 2.6.32 API
*/
-#ifdef HAVE_DENTRY_XATTR_SET
-#define ZPL_XATTR_SET_WRAPPER(fn) \
+#elif defined(HAVE_XATTR_GET_INODE)
+#define ZPL_XATTR_GET_WRAPPER(fn) \
static int \
-fn(struct dentry *dentry, const char *name, const void *buffer, \
- size_t size, int flags, int unused_handler_flags) \
+fn(struct inode *ip, const char *name, void *buffer, size_t size) \
{ \
- return (__ ## fn(dentry->d_inode, name, buffer, size, flags)); \
+ return (__ ## fn(ip, name, buffer, size)); \
}
+#endif
+
/*
* 4.4 API change,
- * The xattr_hander->set() callback was changed to take a xattr_handler,
+ * The xattr_handler->set() callback was changed to take a xattr_handler,
* and handler_flags argument was removed and should be accessed by
* handler->flags.
*/
-#elif defined(HAVE_HANDLER_XATTR_SET)
+#if defined(HAVE_XATTR_SET_HANDLER)
#define ZPL_XATTR_SET_WRAPPER(fn) \
static int \
fn(const struct xattr_handler *handler, struct dentry *dentry, \
@@ -104,7 +154,23 @@ fn(const struct xattr_handler *handler, struct dentry *dentry, \
{ \
return (__ ## fn(dentry->d_inode, name, buffer, size, flags)); \
}
-#else
+/*
+ * 2.6.33 API change,
+ * The xattr_handler->set() callback was changed to take a dentry
+ * instead of an inode, and a handler_flags argument was added.
+ */
+#elif defined(HAVE_XATTR_SET_DENTRY)
+#define ZPL_XATTR_SET_WRAPPER(fn) \
+static int \
+fn(struct dentry *dentry, const char *name, const void *buffer, \
+ size_t size, int flags, int unused_handler_flags) \
+{ \
+ return (__ ## fn(dentry->d_inode, name, buffer, size, flags)); \
+}
+/*
+ * 2.6.32 API
+ */
+#elif defined(HAVE_XATTR_SET_INODE)
#define ZPL_XATTR_SET_WRAPPER(fn) \
static int \
fn(struct inode *ip, const char *name, const void *buffer, \
@@ -112,7 +178,7 @@ fn(struct inode *ip, const char *name, const void *buffer, \
{ \
return (__ ## fn(ip, name, buffer, size, flags)); \
}
-#endif /* HAVE_DENTRY_XATTR_SET */
+#endif
#ifdef HAVE_6ARGS_SECURITY_INODE_INIT_SECURITY
#define zpl_security_inode_init_security(ip, dip, qstr, nm, val, len) \