623
624
625
626
627 cpu_writer->mnt = NULL;
628 spin_unlock(&cpu_writer->lock);
629 }
630
631
632
633
634
635
636 WARN_ON(atomic_read(&mnt->__mnt_writers));
637 dput(mnt->mnt_root);
638 free_vfsmnt(mnt);
639 deactivate_super(sb);
640}
641
642void mntput_no_expire(struct vfsmount *mnt)
643{
644repeat:
645 if (atomic_dec_and_lock(&mnt->mnt_count, &vfsmount_lock)) {
646 if (likely(!mnt->mnt_pinned)) {
647 spin_unlock(&vfsmount_lock);
648 __mntput(mnt);
649 return;
650 }
651 atomic_add(mnt->mnt_pinned + 1, &mnt->mnt_count);
652 mnt->mnt_pinned = 0;
653 spin_unlock(&vfsmount_lock);
654 acct_auto_close_mnt(mnt);
655 security_sb_umount_close(mnt);
656 goto repeat;
657 }
658}
659
660EXPORT_SYMBOL(mntput_no_expire);
661
662void mnt_pin(struct vfsmount *mnt)
663{