O VFS7 é uma camada abstrata existente em diversos núcleos Unix que pretende fornecer uma interface bem definida para implementação de sistemas de arquivos. A interface do VFS é estruturada em cima de tipos de objetos genéricos, e uma série de métodos que são chamados a partir desses objetos.
Dessa maneira é mais fácil implementar um sistema de arquivos para esses Unices, bastando fornecer uma implementação para os métodos dos objetos do VFS para a criação de um sistema de arquivos novo. Os objetos básicos conhecidos pelo VFS são: arquivos, sistemas de arquivos, inodes, e nomes de inodes. Cada um desses objetos possuem um conjunto de métodos especificados nas estruturas super_operations (para o sistema de arquivos), file_operations (para arquivos), inode_operations para inodes, e dentry_operations para nomes dos arquivos.
A seguir são apresentados os métodos necessários para implementar um sistema de arquivos usando o VFS do Linux. Note que nem todos esses métodos precisam ser implementados necessariamente, o Linux fornece alguns métodos genéricos para uso geral. As estruturas foram retirados da versão 2.4.19-pre2 do núcleo do Linux, mas não devem apresentar muitas diferenças entre versões. Os argumentos dos métodos foram removidos para deixá-los mais simples e claros. Esses métodos são extremamente importantes para podermos definir objetos e interfaces CORBA consistentes com as necessidades do VFS.
struct super_operations {
void (*read_inode) ();
void (*dirty_inode) ();
void (*write_inode) ();
void (*put_inode) ();
void (*delete_inode) ();
void (*put_super) ();
void (*write_super) ();
void (*write_super_lockfs) ();
void (*unlockfs) ();
int (*statfs) ();
int (*remount_fs) ();
void (*clear_inode) ();
void (*umount_begin) ();
};
struct file_operations {
struct module *owner;
loff_t (*llseek) ();
ssize_t (*read) ();
ssize_t (*write) ();
int (*readdir) ();
unsigned int (*poll) ();
int (*ioctl) ();
int (*mmap) ();
int (*open) ();
int (*flush) ();
int (*release) ();
int (*fsync) ();
int (*fasync) ();
int (*lock) ();
ssize_t (*readv) ();
ssize_t (*writev) ();
ssize_t (*sendpage) ();
};
struct inode_operations {
int (*create) ();
struct dentry * (*lookup) ();
int (*link) ();
int (*unlink) ();
int (*symlink) ();
int (*mkdir) ();
int (*rmdir) ();
int (*mknod) ();
int (*rename) ();
int (*readlink) ();
int (*follow_link) ();
void (*truncate) ();
int (*permission) ();
int (*revalidate) ();
int (*setattr) ();
int (*getattr) ();
};
struct dentry_operations {
int (*d_revalidate) ();
int (*d_hash) ();
int (*d_compare) ();
int (*d_delete) ();
void (*d_release) ();
void (*d_iput) ();
};