Linux内核API may_umount

may_umount()函数的作用是检查装载点mnt是不是处于忙的状态,在这里,“忙”的定义为在文件装载树上有打开的文件、pwd结构体或者子vfsmount结构体。函数在判断“忙”时主要通过函数propagate_mount_busy()进行判断。

may_umount文件包含

#include <linux/fs.h>

may_umount函数定义

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

函数定义格式:

int may_umount(struct vfsmount *mnt)

may_umount输入参数说明

  • mnt:要被检查的vfsmount结构体,其定义及详细说明参考极客笔记中__mnt_is_readonly()函数的参数说明部分。

may_umount返回参数说明

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

may_umount实例解析

编写测试文件:may_umount.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>
MODULE_LICENSE("GPL");

模块初始化函数:

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

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

模块退出函数:

void may_umount_exit(void)
{
    printk("Goodbye may_umount\n");
}

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

module_init(may_umount_init);
module_exit(may_umount_exit);

实例运行结果及分析:

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

Linux内核API may_umount

结果分析:

将当前文件的vfsmount结构体当作参数传入may_umount()函数中,获得的测试结果为0,表示该vfsmount结构体正忙。原因是当前进程正在进行中,该vfsmount结构体或者其子结构体相关联的被打开的文件处于“忙”状态。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程