mount/umountをもっと詳しく見る ( MNT_DETACHと絡めて )

mount / umount

  • 「mountされているか、いないか」は dentry->d_mountedのカウンタを見る
  • umount -l ( lazy umount )の MNT_DETACHが特別何かフラグを立てたりする訳ではない
    • ファイルシシステムの切り離し、参照カウンタをデクリメントするだけ
  • sys_umount()
    • do_umount()
      • umount_tree()
        • detach_mnt() ... ここで dentry->d_mountedをデクリメント

プロセスが新規にopenしようとしたとき、vfsmountはどう関係するか

  • sys_open
    • filp_open
      • open_namei
        • int fastcall path_lookup(const char *name, unsigned int flags, struct nameidata *nd)
          • retval = link_path_walk(name, nd);
  • int fastcall link_path_walk(const char * name, struct nameidata *nd)
    • static int follow_mount(struct vfsmount **mnt, struct dentry **dentry)
      • struct vfsmount *lookup_mnt(struct vfsmount *mnt, struct dentry *dentry)
        • ここで対象のdentryのvfsmountを探し出す --> 見つからない --> 通常のディレクトリとして処理