static char *__dentry_name(struct dentry *dentry, char *name)
 {
        char *p = dentry_path_raw(dentry, name, PATH_MAX);
-       char *root;
-       size_t len;
-       struct hostfs_fs_info *fsi;
-
-       fsi = dentry->d_sb->s_fs_info;
-       root = fsi->host_root_path;
-       len = strlen(root);
-       if (IS_ERR(p)) {
-               __putname(name);
-               return NULL;
-       }
-
-       /*
-        * This function relies on the fact that dentry_path_raw() will place
-        * the path name at the end of the provided buffer.
-        */
-       BUG_ON(p + strlen(p) + 1 != name + PATH_MAX);
+       struct hostfs_fs_info *fsi = dentry->d_sb->s_fs_info;
+       char *root = fsi->host_root_path;
+       size_t len = strlen(root);
 
-       strscpy(name, root, PATH_MAX);
-       if (len > p - name) {
+       if (IS_ERR(p) || len > p - name) {
                __putname(name);
                return NULL;
        }
 
-       if (p > name + len)
-               strcpy(name + len, p);
+       memcpy(name, root, len);
+       memmove(name + len, p, name + PATH_MAX - p);
 
        return name;
 }