Filesystem Layer

---
title: Filesystem Structures
---
classDiagram
    class vmp_t{
        block_device-t *dev_driver
        vfs_fs_t *fs_driver
        char name[16]
        uint8_t block_buff[BLOCK_DEVICE_BLOCK_SIZE]
        unsigned int mounted : 1
        unsigned int read_only : 1
        uint8_t subdev
        union fs_data
    }
    class block_device_t {
        bool_t active
        char name[16]
        uint8_t num_sub_devices

        int (*init)(block_device_t *dev)
        int (*finish)(void)

        int (*read_block)(uint32_t block_num, uint8_t *buff, uint8_t subdev)
        int (*write_block)(uint32_t block_num, uint8_t *buff, uint8_t subdev)

        void *driver_data
    }
    class vfs_fs_t {
        uint8_t type
        int (*handles_path)(const char *pathname)
        char *name
        block_device_t *dev
        vfs_t api
    }
    class fs_data <<union>> {
        ext2_fs_t   e2fs
    }

    class vfile_t {
        char path[PATH_MAX]
        bool_t open
        vmp_t *mp
        union file_fs_data
    }
    class file_fs_data <<union>> {
        ext2_dirp_t e2dir
    }

    block_device_t <|-- vmp_t
    vfs_fs_t <|-- vmp_t
    file_fs_data <|-- vfile_t
Note

This diagram is evolving as I am in the process of implementing the code for this. Anything could change, so come back often.

On this page
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9