linux.conf.au 2003
Create an inode

static struct inode *usbfs_get_inode (struct super_block *sb, int mode, dev_t dev)
{                               
        struct inode *inode = new_inode(sb);
        if (inode) {            
                inode->i_mode = mode;
                inode->i_uid = current->fsuid;
                inode->i_gid = current->fsgid;
                inode->i_blksize = PAGE_CACHE_SIZE;
                inode->i_blocks = 0;
                inode->i_rdev = NODEV;
                inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
                switch (mode & S_IFMT) {
                default:
                        init_special_inode(inode, mode, dev); 
                        break;
                case S_IFREG: 
                        inode->i_fop = &default_file_operations;
                        break;
                case S_IFDIR: 
                        inode->i_op = &usbfs_dir_inode_operations;
                        inode->i_fop = &simple_dir_operations;
                        /* directory inodes start off with i_nlink == 2 (for "." entry) */
                        inode->i_nlink++;
                        break; 
                }
        }       
        return inode;   
}                       
