diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 2e4eb7cf26fb..d5f47203dfbc 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -1524,6 +1524,18 @@ static int fuse_get_tree_submount(struct fs_context *fsc) return err; } + spin_lock(&mp_fi->lock); + if (mp_fi->nlookup) { + struct fuse_inode *fi = get_fuse_inode(d_inode(sb->s_root)); + mp_fi->nlookup--; + spin_unlock(&mp_fi->lock); + spin_lock(&fi->lock); + fi->nlookup++; + spin_unlock(&fi->lock); + } else { + spin_unlock(&mp_fi->lock); + } + down_write(&fc->killsb); list_add_tail(&fm->fc_entry, &fc->mounts); up_write(&fc->killsb);