{
        struct ovl_cache_entry *p;
 
-       inode_lock_nested(upper->d_inode, I_MUTEX_CHILD);
        list_for_each_entry(p, list, l_node) {
                struct dentry *dentry;
 
                if (WARN_ON(!p->is_whiteout || !p->is_upper))
                        continue;
 
-               dentry = ovl_lookup_upper(ofs, p->name, upper, p->len);
+               dentry = ovl_lookup_upper_unlocked(ofs, p->name, upper, p->len);
                if (IS_ERR(dentry)) {
                        pr_err("lookup '%s/%.*s' failed (%i)\n",
                               upper->d_name.name, p->len, p->name,
                        continue;
                }
                if (dentry->d_inode)
-                       ovl_cleanup(ofs, upper->d_inode, dentry);
+                       ovl_cleanup_unlocked(ofs, upper, dentry);
                dput(dentry);
        }
-       inode_unlock(upper->d_inode);
 }
 
 static bool ovl_check_d_type(struct dir_context *ctx, const char *name,