struct xfs_da_args      *args,
        struct xfs_inode        *dp,
        const unsigned char     *name,
+       size_t                  namelen,
        int                     flags)
 {
 
        args->dp = dp;
        args->flags = flags;
        args->name = name;
-       args->namelen = strlen((const char *)name);
+       args->namelen = namelen;
        if (args->namelen >= MAXNAMELEN)
                return -EFAULT;         /* match IRIX behaviour */
 
 xfs_attr_get(
        struct xfs_inode        *ip,
        const unsigned char     *name,
+       size_t                  namelen,
        unsigned char           **value,
        int                     *valuelenp,
        int                     flags)
        if (XFS_FORCED_SHUTDOWN(ip->i_mount))
                return -EIO;
 
-       error = xfs_attr_args_init(&args, ip, name, flags);
+       error = xfs_attr_args_init(&args, ip, name, namelen, flags);
        if (error)
                return error;
 
 xfs_attr_set(
        struct xfs_inode        *dp,
        const unsigned char     *name,
+       size_t                  namelen,
        unsigned char           *value,
        int                     valuelen,
        int                     flags)
        if (XFS_FORCED_SHUTDOWN(dp->i_mount))
                return -EIO;
 
-       error = xfs_attr_args_init(&args, dp, name, flags);
+       error = xfs_attr_args_init(&args, dp, name, namelen, flags);
        if (error)
                return error;
 
 xfs_attr_remove(
        struct xfs_inode        *dp,
        const unsigned char     *name,
+       size_t                  namelen,
        int                     flags)
 {
        struct xfs_mount        *mp = dp->i_mount;
        if (XFS_FORCED_SHUTDOWN(dp->i_mount))
                return -EIO;
 
-       error = xfs_attr_args_init(&args, dp, name, flags);
+       error = xfs_attr_args_init(&args, dp, name, namelen, flags);
        if (error)
                return error;
 
 
 int xfs_inode_hasattr(struct xfs_inode *ip);
 int xfs_attr_get_ilocked(struct xfs_inode *ip, struct xfs_da_args *args);
 int xfs_attr_get(struct xfs_inode *ip, const unsigned char *name,
-                unsigned char **value, int *valuelenp, int flags);
+                size_t namelen, unsigned char **value, int *valuelenp,
+                int flags);
 int xfs_attr_set(struct xfs_inode *dp, const unsigned char *name,
-                unsigned char *value, int valuelen, int flags);
+                size_t namelen, unsigned char *value, int valuelen, int flags);
 int xfs_attr_set_args(struct xfs_da_args *args);
-int xfs_attr_remove(struct xfs_inode *dp, const unsigned char *name, int flags);
+int xfs_attr_remove(struct xfs_inode *dp, const unsigned char *name,
+                   size_t namelen, int flags);
 int xfs_attr_remove_args(struct xfs_da_args *args);
 int xfs_attr_list(struct xfs_inode *dp, char *buffer, int bufsize,
                  int flags, struct attrlist_cursor_kern *cursor);
 
         * go out to the disk.
         */
        len = XFS_ACL_MAX_SIZE(ip->i_mount);
-       error = xfs_attr_get(ip, ea_name, (unsigned char **)&xfs_acl, &len,
+       error = xfs_attr_get(ip, ea_name, strlen(ea_name),
+                               (unsigned char **)&xfs_acl, &len,
                                ATTR_ALLOC | ATTR_ROOT);
        if (error) {
                /*
                len -= sizeof(struct xfs_acl_entry) *
                         (XFS_ACL_MAX_ENTRIES(ip->i_mount) - acl->a_count);
 
-               error = xfs_attr_set(ip, ea_name, (unsigned char *)xfs_acl,
-                               len, ATTR_ROOT);
+               error = xfs_attr_set(ip, ea_name, strlen(ea_name),
+                                    (unsigned char *)xfs_acl, len, ATTR_ROOT);
 
                kmem_free(xfs_acl);
        } else {
                /*
                 * A NULL ACL argument means we want to remove the ACL.
                 */
-               error = xfs_attr_remove(ip, ea_name, ATTR_ROOT);
+               error = xfs_attr_remove(ip, ea_name,
+                                       strlen(ea_name),
+                                       ATTR_ROOT);
 
                /*
                 * If the attribute didn't exist to start with that's fine.
 
 {
        unsigned char           *kbuf;
        int                     error = -EFAULT;
+       size_t                  namelen;
 
        if (*len > XFS_XATTR_SIZE_MAX)
                return -EINVAL;
        if (!kbuf)
                return -ENOMEM;
 
-       error = xfs_attr_get(XFS_I(inode), name, &kbuf, (int *)len, flags);
+       namelen = strlen(name);
+       error = xfs_attr_get(XFS_I(inode), name, namelen, &kbuf, (int *)len,
+                            flags);
        if (error)
                goto out_kfree;
 
 {
        unsigned char           *kbuf;
        int                     error;
+       size_t                  namelen;
 
        if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
                return -EPERM;
        if (IS_ERR(kbuf))
                return PTR_ERR(kbuf);
 
-       error = xfs_attr_set(XFS_I(inode), name, kbuf, len, flags);
+       namelen = strlen(name);
+       error = xfs_attr_set(XFS_I(inode), name, namelen, kbuf, len, flags);
        if (!error)
                xfs_forget_acl(inode, name, flags);
        kfree(kbuf);
        uint32_t                flags)
 {
        int                     error;
+       size_t                  namelen;
 
        if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
                return -EPERM;
-       error = xfs_attr_remove(XFS_I(inode), name, flags);
+       namelen = strlen(name);
+       error = xfs_attr_remove(XFS_I(inode), name, namelen, flags);
        if (!error)
                xfs_forget_acl(inode, name, flags);
        return error;
 
        int                     error = 0;
 
        for (xattr = xattr_array; xattr->name != NULL; xattr++) {
-               error = xfs_attr_set(ip, xattr->name, xattr->value,
-                                     xattr->value_len, ATTR_SECURE);
+               error = xfs_attr_set(ip, xattr->name,
+                                    strlen(xattr->name),
+                                    xattr->value, xattr->value_len,
+                                    ATTR_SECURE);
                if (error < 0)
                        break;
        }
 
        int xflags = handler->flags;
        struct xfs_inode *ip = XFS_I(inode);
        int error, asize = size;
+       size_t namelen = strlen(name);
 
        /* Convert Linux syscall to XFS internal ATTR flags */
        if (!size) {
                value = NULL;
        }
 
-       error = xfs_attr_get(ip, name, (unsigned char **)&value, &asize, xflags);
+       error = xfs_attr_get(ip, name, namelen, (unsigned char **)&value,
+                            &asize, xflags);
        if (error)
                return error;
        return asize;
        int                     xflags = handler->flags;
        struct xfs_inode        *ip = XFS_I(inode);
        int                     error;
+       size_t                  namelen = strlen(name);
 
        /* Convert Linux syscall to XFS internal ATTR flags */
        if (flags & XATTR_CREATE)
                xflags |= ATTR_REPLACE;
 
        if (value)
-               error = xfs_attr_set(ip, (unsigned char *)name,
-                               (void *)value, size, xflags);
+               error = xfs_attr_set(ip, name, namelen, (void *)value, size,
+                               xflags);
        else
-               error = xfs_attr_remove(ip, (unsigned char *)name, xflags);
+               error = xfs_attr_remove(ip, name, namelen, xflags);
        if (!error)
                xfs_forget_acl(inode, name, xflags);