Whamcloud - gitweb
LU-14651 llite: extend inode methods with user namespace arg
[fs/lustre-release.git] / lustre / llite / xattr.c
index cc7839f..1651d6b 100644 (file)
@@ -90,7 +90,13 @@ static int xattr_type_filter(struct ll_sb_info *sbi,
        return 0;
 }
 
+#ifndef HAVE_USER_NAMESPACE_ARG
+#define ll_xattr_set_common(hd, ns, de, inode, name, value, size, flags) \
+       ll_xattr_set_common(hd, de, inode, name, value, size, flags)
+#endif
+
 static int ll_xattr_set_common(const struct xattr_handler *handler,
+                              struct user_namespace *mnt_userns,
                               struct dentry *dentry, struct inode *inode,
                               const char *name, const void *value, size_t size,
                               int flags)
@@ -123,7 +129,7 @@ static int ll_xattr_set_common(const struct xattr_handler *handler,
 
        if ((handler->flags == XATTR_ACL_ACCESS_T ||
             handler->flags == XATTR_ACL_DEFAULT_T) &&
-           !inode_owner_or_capable(inode))
+           !inode_owner_or_capable(mnt_userns, inode))
                RETURN(-EPERM);
 
        /* b10667: ignore lustre special xattr for now */
@@ -330,7 +336,13 @@ static int ll_setstripe_ea(struct dentry *dentry, struct lov_user_md *lump,
        return rc;
 }
 
+#ifndef HAVE_USER_NAMESPACE_ARG
+#define ll_xattr_set(hd, ns, de, inode, name, value, size, flags) \
+       ll_xattr_set(hd, de, inode, name, value, size, flags)
+#endif
+
 static int ll_xattr_set(const struct xattr_handler *handler,
+                       struct user_namespace *mnt_userns,
                        struct dentry *dentry, struct inode *inode,
                        const char *name, const void *value, size_t size,
                        int flags)
@@ -364,8 +376,8 @@ static int ll_xattr_set(const struct xattr_handler *handler,
            le32_to_cpu(LOV_MAGIC_MASK)) == le32_to_cpu(LOV_MAGIC_MAGIC))
                lustre_swab_lov_user_md((struct lov_user_md *)value, 0);
 
-       return ll_xattr_set_common(handler, dentry, inode, name, value, size,
-                                  flags);
+       return ll_xattr_set_common(handler, mnt_userns, dentry, inode, name,
+                                  value, size, flags);
 }
 
 int ll_xattr_list(struct inode *inode, const char *name, int type, void *buffer,
@@ -741,7 +753,8 @@ static int ll_xattr_set_4_3(const struct xattr_handler *handler,
                            size, flags);
 }
 
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
 const struct xattr_handler *get_xattr_handler(int handler_flag)
 {
        int i = 0;
@@ -787,7 +800,7 @@ static int ll_xattr_set_common_3_11(struct dentry *dentry, const char *name,
        if (!handler)
                return -ENXIO;
 
-       return ll_xattr_set_common(handler, dentry, dentry->d_inode, name,
+       return ll_xattr_set_common(handler, NULL, dentry, dentry->d_inode, name,
                                   value, size, flags);
 }
 
@@ -800,7 +813,7 @@ static int ll_xattr_set_3_11(struct dentry *dentry, const char *name,
        if (!handler)
                return -ENXIO;
 
-       return ll_xattr_set(handler, dentry, dentry->d_inode, name, value,
+       return ll_xattr_set(handler, NULL, dentry, dentry->d_inode, name, value,
                            size, flags);
 }
 #endif
@@ -811,7 +824,8 @@ static const struct xattr_handler ll_user_xattr_handler = {
 #if defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
        .get = ll_xattr_get_common_4_3,
        .set = ll_xattr_set_common_4_3,
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
        .get = ll_xattr_get_common_3_11,
        .set = ll_xattr_set_common_3_11,
 #else
@@ -826,7 +840,8 @@ static const struct xattr_handler ll_trusted_xattr_handler = {
 #if defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
        .get = ll_xattr_get_4_3,
        .set = ll_xattr_set_4_3,
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
        .get = ll_xattr_get_3_11,
        .set = ll_xattr_set_3_11,
 #else
@@ -841,7 +856,8 @@ static const struct xattr_handler ll_security_xattr_handler = {
 #if defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
        .get = ll_xattr_get_common_4_3,
        .set = ll_xattr_set_common_4_3,
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
        .get = ll_xattr_get_common_3_11,
        .set = ll_xattr_set_common_3_11,
 #else
@@ -860,7 +876,8 @@ static const struct xattr_handler ll_acl_access_xattr_handler = {
 #if defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
        .get = ll_xattr_get_common_4_3,
        .set = ll_xattr_set_common_4_3,
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
        .get = ll_xattr_get_common_3_11,
        .set = ll_xattr_set_common_3_11,
 #else
@@ -879,7 +896,8 @@ static const struct xattr_handler ll_acl_default_xattr_handler = {
 #if defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
        .get = ll_xattr_get_common_4_3,
        .set = ll_xattr_set_common_4_3,
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
        .get = ll_xattr_get_common_3_11,
        .set = ll_xattr_set_common_3_11,
 #else
@@ -894,7 +912,8 @@ static const struct xattr_handler ll_lustre_xattr_handler = {
 #if defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
        .get = ll_xattr_get_4_3,
        .set = ll_xattr_set_4_3,
-#elif !defined(HAVE_XATTR_HANDLER_INODE_PARAM)
+#elif !defined(HAVE_USER_NAMESPACE_ARG) && \
+!defined(HAVE_XATTR_HANDLER_INODE_PARAM)
        .get = ll_xattr_get_3_11,
        .set = ll_xattr_set_3_11,
 #else