linux内核umount源代码分析

本文详细分析了Linux内核中umount系统调用的实现过程,从sys_umount函数开始,涉及文件系统根节点检查、权限验证、do_umount函数的操作,包括超级块的umount_begin回调、挂载点的解除以及安全操作等关键步骤。
摘要由CSDN通过智能技术生成
之前我们讲过mount的内核源代码,今天我们来一起看一下umount系统调用的内核源代码实现吧。
首先看sys_umount函数,定义在fs/namespace.c,定义如下
asmlinkage long sys_umount(char __user * name, int flags)
{
	struct nameidata nd;
	int retval;
	/*之前讲过的,格局传入的路径名返回文件的inode和vfsmount结构体*/
	retval = __user_walk(name, LOOKUP_FOLLOW, &nd);
	/*如果失败了就返回错误代码*/
	if (retval)
		goto out;
	retval = -EINVAL;
	/*如果传入的umount点不是对应的挂载文件系统的根节点,也返回*/
	if (nd.dentry != nd.mnt->mnt_root)
		goto dput_and_out;
	/*命名空间检查*/
	if (!check_mnt(nd.mnt))
		goto dput_and_out;


	retval = -EPERM;
	/*之前讲过,权限检查*/
	if (!capable(CAP_SYS_ADMIN))
		goto dput_and_out;
	/*主要工作*/
	retval = do_umount(nd.mnt, flags);
dput_and_out:
	path_release_on_umount(&nd);
out:
	return retval;
}

我们继续看do_umount函数,do_umount函数定义在fs/namespace.c,定义如下
static int do_umount(struct vfsmount *mnt, int flags)
{
	/*挂载点的超
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值