ファイルシステム--登録
登録されたファイルシステムごとにfile_というタイプが使用されます.system_typeのオブジェクトを表す:
fs_flageは次の値をとることができます.
ファイルシステムの登録は関数register_を通じてfilesystem完了:
この関数は、まずファイルシステムが登録されているかどうかを検索し、登録されている場合はエラーを返します.ここで2次ポインタを定義しますfind_を見てくださいfilesystem
ここでpも二次ポインタであり、*pは次のファイルシステムを表し、ここでは二次ポインタが返され、register_filesystemが*pに値を付与すると、この登録するファイルシステムをfile_に追加します.Systemsのチェーンテーブルの末尾.
struct file_system_type {
const char *name;/* */
int fs_flags; /* */
int (*get_sb) (struct file_system_type *, int, /* */
const char *, void *, struct vfsmount *);
void (*kill_sb) (struct super_block *); /* */
struct module *owner; /* */
struct file_system_type * next; /* */
struct list_head fs_supers; /* */
struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
struct lock_class_key s_vfs_rename_key;
struct lock_class_key i_lock_key;
struct lock_class_key i_mutex_key;
struct lock_class_key i_mutex_dir_key;
struct lock_class_key i_alloc_sem_key;
};
fs_flageは次の値をとることができます.
FS_REQUIRES_DEV:
FS_BINARY_MOUNTDATA:
FS_REVAL_DOT: “.” “..” ( )
FS_ODD_RENAME:“ ” “ ”
ファイルシステムの登録は関数register_を通じてfilesystem完了:
int register_filesystem(struct file_system_type * fs)
{
int res = 0;
struct file_system_type ** p;
BUG_ON(strchr(fs->name, '.'));
if (fs->next)
return -EBUSY;
INIT_LIST_HEAD(&fs->fs_supers);//
write_lock(&file_systems_lock);
p = find_filesystem(fs->name, strlen(fs->name));
if (*p)// ?
res = -EBUSY;
else
*p = fs;//*p NULL,
write_unlock(&file_systems_lock);
return res;
}
この関数は、まずファイルシステムが登録されているかどうかを検索し、登録されている場合はエラーを返します.ここで2次ポインタを定義しますfind_を見てくださいfilesystem
static struct file_system_type **find_filesystem(const char *name, unsigned len)
{
struct file_system_type **p;
for (p=&file_systems; *p; p=&(*p)->next)
if (strlen((*p)->name) == len &&
strncmp((*p)->name, name, len) == 0)
break;
return p;
}
ここでpも二次ポインタであり、*pは次のファイルシステムを表し、ここでは二次ポインタが返され、register_filesystemが*pに値を付与すると、この登録するファイルシステムをfile_に追加します.Systemsのチェーンテーブルの末尾.