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をデクリメント
- umount_tree()
- do_umount()
プロセスが新規に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 path_lookup(const char *name, unsigned int flags, struct nameidata *nd)
- open_namei
- filp_open
- 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を探し出す --> 見つからない --> 通常のディレクトリとして処理
- struct vfsmount *lookup_mnt(struct vfsmount *mnt, struct dentry *dentry)
- static int follow_mount(struct vfsmount **mnt, struct dentry **dentry)