fssh_fs_volume
#define fs_volume fssh_fs_volume
fssh_status_t (*remove_index)(fssh_fs_volume *volume, const char *name);
fssh_status_t (*read_index_stat)(fssh_fs_volume *volume, const char *name,
fssh_status_t (*open_query)(fssh_fs_volume *volume, const char *query,
fssh_status_t (*close_query)(fssh_fs_volume *volume, fssh_fs_cookie cookie);
fssh_status_t (*free_query_cookie)(fssh_fs_volume *volume,
fssh_status_t (*read_query)(fssh_fs_volume *volume, fssh_fs_cookie cookie,
fssh_status_t (*rewind_query)(fssh_fs_volume *volume,
fssh_status_t (*create_sub_vnode)(fssh_fs_volume *volume, fssh_ino_t id,
fssh_status_t (*delete_sub_vnode)(fssh_fs_volume *volume,
fssh_status_t (*lookup)(fssh_fs_volume *volume, fssh_fs_vnode *dir,
fssh_status_t (*get_vnode_name)(fssh_fs_volume *volume,
fssh_status_t (*put_vnode)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*remove_vnode)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
bool (*can_page)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*read_pages)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*write_pages)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*io)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*cancel_io)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*get_file_map)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*ioctl)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*set_flags)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*select)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*deselect)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*fsync)(fssh_fs_volume *volume, fssh_fs_vnode *vnode, bool dataOnly);
fssh_status_t (*read_symlink)(fssh_fs_volume *volume, fssh_fs_vnode *link,
fssh_status_t (*create_symlink)(fssh_fs_volume *volume, fssh_fs_vnode *dir,
fssh_status_t (*link)(fssh_fs_volume *volume, fssh_fs_vnode *dir,
fssh_status_t (*unlink)(fssh_fs_volume *volume, fssh_fs_vnode *dir,
fssh_status_t (*rename)(fssh_fs_volume *volume, fssh_fs_vnode *fromDir,
fssh_status_t (*access)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*read_stat)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*write_stat)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*preallocate)(fssh_fs_volume* volume, fssh_fs_vnode* vnode,
fssh_status_t (*create)(fssh_fs_volume *volume, fssh_fs_vnode *dir,
fssh_status_t (*open)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*close)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*free_cookie)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*read)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*write)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*create_dir)(fssh_fs_volume *volume, fssh_fs_vnode *parent,
fssh_status_t (*remove_dir)(fssh_fs_volume *volume, fssh_fs_vnode *parent,
fssh_status_t (*open_dir)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*close_dir)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*free_dir_cookie)(fssh_fs_volume *volume,
fssh_status_t (*read_dir)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*rewind_dir)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*open_attr_dir)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*close_attr_dir)(fssh_fs_volume *volume,
fssh_status_t (*free_attr_dir_cookie)(fssh_fs_volume *volume,
fssh_status_t (*read_attr_dir)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*rewind_attr_dir)(fssh_fs_volume *volume,
fssh_status_t (*create_attr)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*open_attr)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*close_attr)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*free_attr_cookie)(fssh_fs_volume *volume,
fssh_status_t (*read_attr)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*write_attr)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*read_attr_stat)(fssh_fs_volume *volume,
fssh_status_t (*write_attr_stat)(fssh_fs_volume *volume,
fssh_status_t (*rename_attr)(fssh_fs_volume *volume,
fssh_status_t (*remove_attr)(fssh_fs_volume *volume, fssh_fs_vnode *vnode,
fssh_status_t (*create_special_node)(fssh_fs_volume *volume,
fssh_status_t (*get_super_vnode)(fssh_fs_volume *volume,
fssh_fs_vnode *vnode, fssh_fs_volume *superVolume,
fssh_status_t (*mount)(fssh_fs_volume *volume, const char *device,
extern fssh_status_t fssh_new_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_publish_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_get_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_put_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_acquire_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_remove_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_unremove_vnode(fssh_fs_volume *volume,
extern fssh_status_t fssh_get_vnode_removed(fssh_fs_volume *volume,
extern fssh_fs_volume* fssh_volume_for_vnode(fssh_fs_vnode *vnode);
typedef struct fssh_fs_volume fssh_fs_volume;
fssh_fs_volume* sub_volume;
fssh_fs_volume* super_volume;
fssh_status_t (*unmount)(fssh_fs_volume *volume);
fssh_status_t (*read_fs_info)(fssh_fs_volume *volume,
fssh_status_t (*write_fs_info)(fssh_fs_volume *volume,
fssh_status_t (*sync)(fssh_fs_volume *volume);
fssh_status_t (*get_vnode)(fssh_fs_volume *volume, fssh_vnode_id id,
fssh_status_t (*open_index_dir)(fssh_fs_volume *volume,
fssh_status_t (*close_index_dir)(fssh_fs_volume *volume,
fssh_status_t (*free_index_dir_cookie)(fssh_fs_volume *volume,
fssh_status_t (*read_index_dir)(fssh_fs_volume *volume,
fssh_status_t (*rewind_index_dir)(fssh_fs_volume *volume,
fssh_status_t (*create_index)(fssh_fs_volume *volume, const char *name,
fssh_fs_volume *volume;
fssh_new_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID,
fssh_publish_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID,
fssh_fs_volume *subVolume = volume;
fssh_get_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID,
fssh_acquire_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID)
fssh_put_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID)
fssh_remove_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID)
fssh_unremove_vnode(fssh_fs_volume *volume, fssh_vnode_id vnodeID)
fssh_get_vnode_removed(fssh_fs_volume *volume, fssh_vnode_id vnodeID, bool* removed)
extern "C" fssh_fs_volume*
vfs_get_fs_node_from_path(fssh_fs_volume *volume, const char *path,
mount->volume = (fssh_fs_volume*)malloc(sizeof(fssh_fs_volume));