0.sys_umount() -----> 文件系统卸载的系统调用
(1)根据设备名搜索设备的安装点
不管给的是安装点的路径名还是设备文件的路径名,都会搜过以下结果:
nd.dentry指向设备文件根目录的dentry
nd.mnt指向设备安装到的安装的vfsmount
(2)释放目录项
这里只是减少引用计数,移到unused队列,不一定真的释放
(3)卸载do_umount():见1
1.do_umount() ----->卸载 文件系统
(1)把vfsmount从设备的超级块sb->s_mounts队列中移动
vfsmount与设备的超级块的关系见前一篇博客《Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系》
(2)若该设备安装了多次,则只需要拆除该设备多次安装的一次,不需要将设备拆下:remove_vfsmnt()见2
(3)若该设备只安装了一次,则见3
2.remove_vfsmount() -----> 拆除该设备多次安装的一次
(1)从各种队列中移除,
见前一篇博客《Linux2.4文件系统中vfsmount、安装点的dentry、设备的dentry之间的关系》
(2)递减各种引用计数
(3)释放vfsmount
3.卸载设备
(1)把unused队列中的dentry结构都释放
(2)设备超级块的同步
为了提高效率,块设备的输入/输出一般都是有缓冲的,无论是对超级块的改变还是对某个索引节点的改变,或者对某个数据块的改变,都只是对它们在内存中映像的改变,而不一定马上写回到设备上。
(3)i节点的同步
(4)数据块的同步