Linux内核 may_umount_tree()

函数:may_umount_tree()

may_umount_tree()函数的功能是检查文件装载树中的mnt结构体以及该结构体的子vfsmount结构体是否处于忙的状态。如果在文件装载树上有打开的文件、pwd结构体或者子vfsmount结构体,则表示其处于“忙”状态。

文件包含:

#include <linux/fs.h>

函数定义:

在内核源码中的位置:linux-3.19.3/fs/namespace.c

函数定义格式:

int may_umount_tree(struct vfsmount *mnt)

输入参数说明:

返回参数说明:

  • may_umount_tree()函数的返回值为0或者1,若返回0,则表示该vfsmount结构体正忙;若返回1,则表示该vfsmount结构体不忙。

实例解析:

编写测试文件:may_umount_tree.c

头文件声明如下:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/fs_struct.h>
#include <linux/path.h>
#include <linux/sched.h>
#include <linux/fdtable.h>
#include <linux/mount.h>
#include <linux/seq_file.h>
MODULE_LICENSE("GPL");

模块初始化函数:

int may_umount_tree_init(void)
{
    struct vfsmount *mnt;
    mnt = current->fs->pwd.mnt;           //获取当前文件的vfsmount结构体

    // 检查文件装载树mnt是否处于忙状态
    int data1 = may_umount_tree(mnt);
    printk("After \"may_umount_tree\", the returned value is :%d\n", data1);
                                          // 显示函数调用结果
    return 0;
}

模块退出函数:

void may_umount_tree_exit(void)
{
    printk("Goodbye may_umount_tree\n");
}

模块初始化及退出函数调用:

module_init(may_umount_tree_init);
module_exit(may_umount_tree_exit);

实例运行结果及分析:

首先编译模块,执行命令insmod may_umount_tree.ko插入模块,然后执行命令dmesg-c,会出现如图所示的结果。

Linux内核 may_umount_tree()

结果分析:

将当前文件的vfsmount结构体当做参数传入may_umount_tree()函数中,获得的测试结果为0,表示该vfsmount结构体正忙。由于当前进程正在进行中,处于“忙”状态。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!