In fs/ext2
liegen die Sourcen des filesystem ext2. Dazu gehört
include/linux/ext2_fs.h.
fs/ext2/acl.c
kann man den Check der Rechte durch ACLs
einbauen. Die Datei enthält nur folgende Funktion:
/* * This file will contain the Access Control Lists management for the * second extended file system. */ int ext2_permission (struct inode * inode, int mask)
Diese testet, ob die Rechte, gegeben durch mask, auf den inode durch current gegeben sind. current ist eine globale Struktur, die uid gid usw. angibt. Noch nicht abgetestet werden ACLs.
balloc.c
wird die Verwaltung freier Blöcke gemacht. Dazu:
/* * The free blocks are managed by bitmaps. A file system contains several * blocks groups. Each group contains 1 bitmap block for blocks, 1 bitmap * block for inodes, N blocks for the inode table and data blocks. * * The file system contains group descriptors which are located after the * super block. Each descriptor contains the number of the bitmap block and * the free blocks count in the block. The descriptors are loaded in memory * when a file system is mounted (see \verb+ext2_read_super+). */
bitmap.c
enthält eine Hilfsfunktion für balloc.c.
dir.c
sind die beiden folgenden, wichtigen Strukturen definiert:
static struct file_operations ext2_dir_operations = { NULL, /* lseek - default */ ext2_dir_read, /* read */ NULL, /* write - bad */ ext2_readdir, /* readdir */ NULL, /* select - default */ ext2_ioctl, /* ioctl */ NULL, /* mmap */ NULL, /* no special open code */ NULL, /* no special release code */ file_fsync, /* fsync */ NULL, /* fasync */ NULL, /* check_media_change */ NULL /* revalidate */ }; /* * directories can handle most operations... */ struct inode_operations ext2_dir_inode_operations = { &ext2_dir_operations, /* default directory file-ops */ ext2_create, /* create */ ext2_lookup, /* lookup */ ext2_link, /* link */ ext2_unlink, /* unlink */ ext2_symlink, /* symlink */ ext2_mkdir, /* mkdir */ ext2_rmdir, /* rmdir */ ext2_mknod, /* mknod */ ext2_rename, /* rename */ NULL, /* readlink */ NULL, /* follow_link */ NULL, /* readpage */ NULL, /* writepage */ NULL, /* bmap */ ext2_truncate, /* truncate */ ext2_permission, /* permission */ NULL /* smap */ };
ext2_dir_operations
wird an jeden file descriptor gehängt, der auf ein
geöffnetes Verzeichnis zeigt. ext2_dir_inode_operations
wird an jeden
Inode (im Speicher) gehängt, in dem ein Verzeichnis abgelegt
ist. D.h. wenn das VFS einen inode oder ein directory über das ext2
liest, werden diese Zeiger auf Funktionen mitgeliefert. Da, wo NULL
angegeben wurde, werden die Default Funktionen des VFS benutzt. Der
Mechanismus ist also der gleiche wie am Beispiel des Lesens des
superblocks gezeigt.
file.c
sind nochmal zwei entsprechende Sätze von
Funktionszeigern für Datei Operationen definiert. Die Strukturen
werden an File Deskriptoren bzw. Inodes gehängt, die Dateien
referenzieren. Wenn man versucht ene Datei zu öffnen, wird der
entsprechende Inode gelesen (siehe namei.c). Der Inode hat dann den
Funktionssatz für Dateien. In diesem Satz ist auch die Funktion zum
Öffnen der Datei, die schließlich aufgerufen wird.
fsync.c
sind Funktionen, um Blöcke, die noch im Speicher sind, mit
ll_rw_block
auszuschreiben.
ialloc.c
wird die Verwaltung freier Inodes
gemacht. Dazu:
/* * The free inodes are managed by bitmaps. A file system contains several * blocks groups. Each group contains 1 bitmap block for blocks, 1 bitmap * block for inodes, N blocks for the inode table and data blocks. * * The file system contains group descriptors which are located after the * super block. Each descriptor contains the number of the bitmap block and * the free blocks count in the block. The descriptors are loaded in memory * when a file system is mounted (see \verb+ext2_read_super+). */
inode.c
werden Inodes gelesen und geschrieben. Vor
allem werden hier die richtigen Funktionssätze an die Inodes gehängt.
ioctl.c
namei.c
sind Funktionen, um einem Dateinamen einen
Inode zuzuordnen, und Dateinamen in Verzeichnissen anzulegen und zu
löschen.
super.c
siehe oben.
symlink.c
sind die inode_operations
für symbolische
Links definiert. Das sind die Funktionen ext2_readlink
und
ext2_follow_link
.
truncate.c
sind Funktionen, um Dateien abzuschneiden.