next up previous contents
Next: Die Quellen von ext2 Up: Das ext2 Previous: Das ext2

Beispiel: Registrierung und Mount von filesystems

Die konkreten filesystems (ext2, minix, xiafs, ...) werden beim kernel startup durch die vfs Funktion sys_setup in fs/filesystems.c registriert. Für jedes filesystem wird init_name_fs aufgerufen, für ext2 also init_ext2_fs in fs/ext2/super.c. init_name_fs ruft meist nur register_filesystem in fs/super.c auf mit folgender Struktur als Parameter:

struct file_system_type {
  struct super_block *(*read_super) (struct super_block *, void *, int);
  const char *name;
  int requires_dev;
  struct file_system_type * next;
};

Der erste Parameter ist ein Zeiger auf die Funktion, um den superblock zu lesen. Der zweite Paramter ist der Name des filesystems. requires_dev gibt an, ob das filesystem auf einem device gemountet werden muß - ob unter dem filesystem ein device liegen muß. Der letzte Zeiger zeigt auf die Beschreibung des nächsten filesystems und wird im Kernel verwendet, um die Liste der filesystems aufzubauen.

Die obige Struktur ist für das ext2 ebenfalls in fs/ext2/super.c definiert:

static struct file_system_type ext2_fs_type = {
  ext2_read_super, 
  "ext2", 
  1, 
  NULL
};

D.h. die Funktion, um den superblock von ext2 zu lesen, ist ext2_read_super, die auch in fs/ext2/super.c definiert ist.

Nun kann man ein Beispiel für das switchen des VFS angeben: Ein User ruft mount -t ext2 /dev/xxxx /mnt auf. Dabei wird system call 21 - mount per interrupt aufgerufen. Der interrupt handler ruft sys_mount in fs/super.c auf. In sys_mount wird (über do_mount) read_super aufgerufen. Diese Funktion geht nun die registrierten file systems durch, bis der Eintrag für ext2 gefunden wird. Dann wird die Funktion in dieser Struktur (ext2_read_super) aufgerufen, um den superblock zu lesen.


next up previous contents
Next: Die Quellen von ext2 Up: Das ext2 Previous: Das ext2

Matthias
Fri May 8 12:45:01 MEST 1998