内核文件系统API之vfs_statfs

int vfs_statfs(const struct path *path, struct kstatfs *buf) 用于返回形参path 表示的文件的mount point和super block的有效flags
返回的结果保存在形参buf中
其结构体如下:
struct kstatfs {
	long f_type;
	long f_bsize;
	u64 f_blocks;
	u64 f_bfree;
	u64 f_bavail;
	u64 f_files;
	u64 f_ffree;
	__kernel_fsid_t f_fsid;
	long f_namelen;
	long f_frsize;
	long f_flags;
	long f_spare[4];
};
其源码分析如下:
int vfs_statfs(const struct path *path, struct kstatfs *buf)
{
	int error;
	#检查path对应的dentry 是否有error
	error = statfs_by_dentry(path->dentry, buf);
	if (!error)
		#如果没有error,就返回mount point和 super block的有效flags
		buf->f_flags = calculate_f_flags(path->mnt);
	return error;
}
下面这个函数就很清楚的看到是返回mnt 和super block的有效flags
static int calculate_f_flags(struct vfsmount *mnt)
{
	return ST_VALID | flags_by_mnt(mnt->mnt_flags) |
		flags_by_sb(mnt->mnt_sb->s_flags);
}

你可能感兴趣的:(Linux,源码分析,kernel常用API源码分析)