diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 760437a91648..537390c984ee 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c @@ -734,7 +734,7 @@ static ssize_t bm_entry_write(struct file *file, const char __user *buffer, case 3: /* Delete this handler. */ inode = d_inode(inode->i_sb->s_root); - inode_lock(inode); + inode_lock_nested(inode, I_MUTEX_PARENT); /* * In order to add new element or remove elements from the list diff --git a/fs/libfs.c b/fs/libfs.c index 3bc6c3750b47..0e3e33c4f159 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -611,7 +611,7 @@ static void __simple_recursive_removal(struct dentry *dentry, struct dentry *victim = NULL, *child; struct inode *inode = this->d_inode; - inode_lock(inode); + inode_lock_nested(inode, I_MUTEX_CHILD); if (d_is_dir(this)) inode->i_flags |= S_DEAD; while ((child = find_next_child(this, victim)) == NULL) { @@ -624,7 +624,7 @@ static void __simple_recursive_removal(struct dentry *dentry, this = this->d_parent; inode = this->d_inode; if (!locked || victim != dentry) - inode_lock(inode); + inode_lock_nested(inode, I_MUTEX_CHILD); if (simple_positive(victim)) { d_invalidate(victim); // avoid lost mounts if (callback)