Whamcloud - gitweb
LU-13430 vfs: add ll_vfs_getxattr/ll_vfs_setxattr compat macro 75/38175/2
authorSebastien Buisson <sbuisson@ddn.com>
Mon, 6 Apr 2020 09:29:10 +0000 (09:29 +0000)
committerOleg Drokin <green@whamcloud.com>
Sun, 19 Apr 2020 08:45:15 +0000 (08:45 +0000)
Instead of checking everywhere in the code whether kernel defines
__vfs_getxattr/__vfs_setxattr/__vfs_removexattr, define compat macros
to handle this in lustre_compat.h.

Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: Iabb54c41e6ccc4b9524f614308a4cd98c5a7ec55
Reviewed-on: https://review.whamcloud.com/38175
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/include/lustre_compat.h
lustre/llite/pcc.c
lustre/llite/xattr_security.c
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_internal.h
lustre/osd-ldiskfs/osd_scrub.c

index 53c8a17..b9e5ca8 100644 (file)
@@ -193,31 +193,6 @@ static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr)
 #define ll_removexattr  generic_removexattr
 #endif /* HAVE_IOP_XATTR */
 
-#ifndef HAVE_VFS_SETXATTR
-const struct xattr_handler *get_xattr_type(const char *name);
-
-static inline int
-__vfs_setxattr(struct dentry *dentry, struct inode *inode, const char *name,
-              const void *value, size_t size, int flags)
-{
-       const struct xattr_handler *handler;
-       int rc;
-
-       handler = get_xattr_type(name);
-       if (!handler)
-               return -EOPNOTSUPP;
-
-#  if defined(HAVE_XATTR_HANDLER_INODE_PARAM)
-       rc = handler->set(handler, dentry, inode, name, value, size, flags);
-#  elif defined(HAVE_XATTR_HANDLER_SIMPLIFIED)
-       rc = handler->set(handler, dentry, name, value, size, flags);
-#  else
-       rc = handler->set(dentry, name, value, size, flags, handler->flags);
-#  endif /* !HAVE_XATTR_HANDLER_INODE_PARAM */
-       return rc;
-}
-#endif /* HAVE_VFS_SETXATTR */
-
 #ifndef HAVE_POSIX_ACL_VALID_USER_NS
 #define posix_acl_valid(a,b)           posix_acl_valid(b)
 #endif
@@ -541,4 +516,45 @@ static inline bool bdev_integrity_enabled(struct block_device *bdev, int rw)
 #define selinux_is_enabled() 1
 #endif
 
+static inline int ll_vfs_getxattr(struct dentry *dentry, struct inode *inode,
+                                 const char *name,
+                                 void *value, size_t size)
+{
+#ifndef HAVE_VFS_SETXATTR
+       if (!inode->i_op->getxattr)
+               return -ENODATA;
+
+       return inode->i_op->getxattr(dentry, name, value, size);
+#else
+       return __vfs_getxattr(dentry, inode, name, value, size);
+#endif
+}
+
+static inline int ll_vfs_setxattr(struct dentry *dentry, struct inode *inode,
+                                 const char *name,
+                                 const void *value, size_t size, int flags)
+{
+#ifndef HAVE_VFS_SETXATTR
+       if (!inode->i_op->setxattr)
+               return -ENOTSUPP;
+
+       return inode->i_op->setxattr(dentry, name, value, size, flags);
+#else
+       return __vfs_setxattr(dentry, inode, name, value, size, flags);
+#endif
+}
+
+static inline int ll_vfs_removexattr(struct dentry *dentry, struct inode *inode,
+                                    const char *name)
+{
+#ifndef HAVE_VFS_SETXATTR
+       if (!inode->i_op->setxattr)
+               return -ENOTSUPP;
+
+       return inode->i_op->removexattr(dentry, name);
+#else
+       return __vfs_removexattr(dentry, name);
+#endif
+}
+
 #endif /* _LUSTRE_COMPAT_H */
index eeae234..70da52d 100644 (file)
@@ -1106,16 +1106,9 @@ static int pcc_layout_xattr_set(struct pcc_inode *pcci, __u32 gen)
        if (!(lli->lli_pcc_dsflags & PCC_DATASET_AUTO_ATTACH))
                RETURN(0);
 
-#ifndef HAVE_VFS_SETXATTR
-       if (!pcc_dentry->d_inode->i_op->setxattr)
-               RETURN(-ENOTSUPP);
+       rc = ll_vfs_setxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
+                            &gen, sizeof(gen), 0);
 
-       rc = pcc_dentry->d_inode->i_op->setxattr(pcc_dentry, pcc_xattr_layout,
-                                                &gen, sizeof(gen), 0);
-#else
-       rc = __vfs_setxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
-                           &gen, sizeof(gen), 0);
-#endif
        RETURN(rc);
 }
 
@@ -1238,18 +1231,8 @@ static int pcc_try_dataset_attach(struct inode *inode, __u32 gen,
                GOTO(out, rc = 0);
 
        pcc_dentry = path.dentry;
-#ifndef HAVE_VFS_SETXATTR
-       if (!pcc_dentry->d_inode->i_op->getxattr)
-               /* ignore this error */
-               GOTO(out_put_path, rc = 0);
-
-       rc = pcc_dentry->d_inode->i_op->getxattr(pcc_dentry, pcc_xattr_layout,
-                                                &pcc_gen, sizeof(pcc_gen));
-#else
-       rc = __vfs_getxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
-                           &pcc_gen, sizeof(pcc_gen));
-#endif
-
+       rc = ll_vfs_getxattr(pcc_dentry, pcc_dentry->d_inode, pcc_xattr_layout,
+                            &pcc_gen, sizeof(pcc_gen));
        if (rc < 0)
                /* ignore this error */
                GOTO(out_put_path, rc = 0);
index f1c1ed9..94679b8 100644 (file)
@@ -115,8 +115,8 @@ ll_initxattrs(struct inode *inode, const struct xattr *xattr_array,
                        break;
                }
 
-               err = __vfs_setxattr(dentry, inode, full_name, xattr->value,
-                                    xattr->value_len, XATTR_CREATE);
+               err = ll_vfs_setxattr(dentry, inode, full_name, xattr->value,
+                                     xattr->value_len, XATTR_CREATE);
                kfree(full_name);
                if (err < 0)
                        break;
index e0c1337..8d8d8b4 100644 (file)
@@ -4411,7 +4411,7 @@ static int osd_xattr_set_pfid(const struct lu_env *env, struct osd_object *obj,
 
                /* Remove old PFID EA entry firstly. */
                dquot_initialize(inode);
-               rc = osd_removexattr(dentry, inode, XATTR_NAME_FID);
+               rc = ll_vfs_removexattr(dentry, inode, XATTR_NAME_FID);
                if (rc == -ENODATA) {
                        if ((fl & LU_XATTR_REPLACE) && !(fl & LU_XATTR_CREATE))
                                RETURN(rc);
@@ -4717,7 +4717,7 @@ static int osd_xattr_del(const struct lu_env *env, struct dt_object *dt,
                dquot_initialize(inode);
                dentry->d_inode = inode;
                dentry->d_sb = inode->i_sb;
-               rc = osd_removexattr(dentry, inode, name);
+               rc = ll_vfs_removexattr(dentry, inode, name);
        }
 
        osd_trans_exec_check(env, handle, OSD_OT_XATTR_SET);
index 7c47013..6c62ca4 100644 (file)
@@ -711,22 +711,6 @@ extern int ldiskfs_pdo;
 #define DECLARE_BVEC_ITER_ALL(iter) int iter
 #endif
 
-#ifndef HAVE_VFS_SETXATTR
-#define osd_setxattr(dentry, inode, name, buf, len, flag) \
-               ((inode)->i_op->setxattr(dentry, name, buf, len, flag))
-#define osd_getxattr(dentry, inode, name, buf, len) \
-               ((inode)->i_op->getxattr(dentry, name, buf, len))
-#define osd_removexattr(dentry, inode, name) \
-               ((inode)->i_op->removexattr(dentry, name))
-#else /* HAVE_VFS_SETXATTR */
-#define osd_setxattr(dentry, inode, name, buf, len, flag) \
-               __vfs_setxattr(dentry, inode, name, buf, len, flag)
-#define osd_getxattr(dentry, inode, name, buf, len) \
-               __vfs_getxattr(dentry, inode, name, buf, len)
-#define osd_removexattr(dentry, inode, name) \
-               __vfs_removexattr(dentry, name)
-#endif /* !HAVE_VFS_SETXATTR */
-
 static inline int __osd_xattr_get(struct inode *inode, struct dentry *dentry,
                                  const char *name, void *buf, int len)
 {
@@ -735,7 +719,7 @@ static inline int __osd_xattr_get(struct inode *inode, struct dentry *dentry,
 
        dentry->d_inode = inode;
        dentry->d_sb = inode->i_sb;
-       return osd_getxattr(dentry, inode, name, buf, len);
+       return ll_vfs_getxattr(dentry, inode, name, buf, len);
 }
 
 static inline int __osd_xattr_set(struct osd_thread_info *info,
@@ -747,7 +731,7 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
        dquot_initialize(inode);
        dentry->d_inode = inode;
        dentry->d_sb = inode->i_sb;
-       return osd_setxattr(dentry, inode, name, buf, buflen, fl);
+       return ll_vfs_setxattr(dentry, inode, name, buf, buflen, fl);
 }
 
 #ifdef CONFIG_PROC_FS
index c81ba1b..ed25083 100644 (file)
@@ -208,7 +208,7 @@ osd_scrub_convert_ff(struct osd_thread_info *info, struct osd_device *dev,
        if (rc == sizeof(*ff)) {
                /* 2) delete the old XATTR_NAME_FID */
                dquot_initialize(inode);
-               rc = osd_removexattr(dentry, inode, XATTR_NAME_FID);
+               rc = ll_vfs_removexattr(dentry, inode, XATTR_NAME_FID);
                if (rc)
                        GOTO(stop, rc);