#include #include #include #include static struct super_operations snet_sops = { read_inode: snet_read_inode, }; void snet_read_inode(struct inode *inode) { SNETFS_DEBUG("snet_read_inode, ino = %lu, sb = %p\n", inode->i_ino, inode->i_sb); if (SNET_IS_RESERVED_DIR(inode->i_ino)){ inode->i_mode = S_IFDIR; } } struct super_block * snet_read_super(struct super_block * sb, void * data, int silent) { SNETFS_DEBUG("snet_read_super() called, sb = %p\n", sb); sb->s_magic = SNET_SUPER_MAGIC; sb->s_op = &snet_sops; sb->s_root = d_alloc_root(iget(sb, SNET_ROOT_INO)); if (!sb->s_root){ printk("snet_read_super: get root inode failed\n"); return NULL; } /* TODO: allocate the first page for /, /raw, /event, /proc */ SNETFS_DEBUG("snet_read_super() done\n"); return sb; } static DECLARE_FSTYPE(snet_fs_type, "simple", snet_read_super, 0); static int __init init_snet_fs(void) { SNETFS_DEBUG("init_snet_fs() called\n"); return register_filesystem(&snet_fs_type); } static void __exit exit_snet_fs(void) { SNETFS_DEBUG("exit_snet_fs() called\n"); unregister_filesystem(&snet_fs_type); } EXPORT_NO_SYMBOLS; module_init(init_snet_fs) module_exit(exit_snet_fs)