diff --git a/fs/open.c b/fs/open.c index 3d64372ecc67..d3e266e332f8 100644 --- a/fs/open.c +++ b/fs/open.c @@ -790,12 +790,15 @@ int chown_common(const struct path *path, uid_t user, gid_t group) if (!error) error = notify_change(idmap, path->dentry, &newattrs, &delegated_inode); - inode_unlock(inode); - if (delegated_inode) { + if (delegated_inode && delegated_inode != inode) { + inode_unlock(inode); error = break_deleg_wait(&delegated_inode); if (!error) goto retry_deleg; + } else { + inode_unlock(inode); } + delegated_inode = NULL; return error; }