static int bfs_add_entry(struct inode *dir, const unsigned char *name,
                                                int namelen, int ino);
 static struct buffer_head *bfs_find_entry(struct inode *dir,
-                               const unsigned char *name, int namelen,
+                               const struct qstr *child,
                                struct bfs_dirent **res_dir);
 
 static int bfs_readdir(struct file *f, struct dir_context *ctx)
                return ERR_PTR(-ENAMETOOLONG);
 
        mutex_lock(&info->bfs_lock);
-       bh = bfs_find_entry(dir, dentry->d_name.name, dentry->d_name.len, &de);
+       bh = bfs_find_entry(dir, &dentry->d_name, &de);
        if (bh) {
                unsigned long ino = (unsigned long)le16_to_cpu(de->ino);
                brelse(bh);
        struct bfs_sb_info *info = BFS_SB(inode->i_sb);
 
        mutex_lock(&info->bfs_lock);
-       bh = bfs_find_entry(dir, dentry->d_name.name, dentry->d_name.len, &de);
+       bh = bfs_find_entry(dir, &dentry->d_name, &de);
        if (!bh || (le16_to_cpu(de->ino) != inode->i_ino))
                goto out_brelse;
 
        info = BFS_SB(old_inode->i_sb);
 
        mutex_lock(&info->bfs_lock);
-       old_bh = bfs_find_entry(old_dir, 
-                               old_dentry->d_name.name, 
-                               old_dentry->d_name.len, &old_de);
+       old_bh = bfs_find_entry(old_dir, &old_dentry->d_name, &old_de);
 
        if (!old_bh || (le16_to_cpu(old_de->ino) != old_inode->i_ino))
                goto end_rename;
 
        error = -EPERM;
        new_inode = d_inode(new_dentry);
-       new_bh = bfs_find_entry(new_dir, 
-                               new_dentry->d_name.name, 
-                               new_dentry->d_name.len, &new_de);
+       new_bh = bfs_find_entry(new_dir, &new_dentry->d_name, &new_de);
 
        if (new_bh && !new_inode) {
                brelse(new_bh);
 }
 
 static struct buffer_head *bfs_find_entry(struct inode *dir,
-                       const unsigned char *name, int namelen,
+                       const struct qstr *child,
                        struct bfs_dirent **res_dir)
 {
        unsigned long block = 0, offset = 0;
        struct buffer_head *bh = NULL;
        struct bfs_dirent *de;
+       const unsigned char *name = child->name;
+       int namelen = child->len;
 
        *res_dir = NULL;
        if (namelen > BFS_NAMELEN)