Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/mfs/mfs_ops.c

    r6d4d883 r36cb22f  
    4343
    4444static bool check_magic_number(uint16_t magic, bool *native,
    45     mfs_version_t *version, bool *longfilenames);
     45                               mfs_version_t *version, bool *longfilenames);
    4646static int mfs_node_core_get(fs_node_t **rfn, struct mfs_instance *inst,
    47     fs_index_t index);
     47                             fs_index_t index);
     48
    4849static int mfs_node_put(fs_node_t *fsnode);
    4950static int mfs_node_open(fs_node_t *fsnode);
     
    6364static hash_index_t open_nodes_hash(unsigned long key[]);
    6465static int open_nodes_compare(unsigned long key[], hash_count_t keys,
    65     link_t *item);
     66                link_t *item);
    6667static void open_nodes_remove_cb(link_t *link);
     68
    6769static int mfs_node_get(fs_node_t **rfn, service_id_t service_id,
    68     fs_index_t index);
    69 static int mfs_instance_get(service_id_t service_id,
    70     struct mfs_instance **instance);
     70                        fs_index_t index);
     71static int
     72mfs_instance_get(service_id_t service_id, struct mfs_instance **instance);
    7173
    7274
     
    9496
    9597/* Hash table interface for open nodes hash table */
    96 static hash_index_t
    97 open_nodes_hash(unsigned long key[])
     98static hash_index_t open_nodes_hash(unsigned long key[])
    9899{
    99100        /* TODO: This is very simple and probably can be improved */
     
    101102}
    102103
    103 static int
    104 open_nodes_compare(unsigned long key[], hash_count_t keys,
    105     link_t *item)
     104static int open_nodes_compare(unsigned long key[], hash_count_t keys,
     105                link_t *item)
    106106{
    107107        struct mfs_node *mnode = hash_table_get_instance(item, struct mfs_node, link);
     
    118118}
    119119
    120 static void
    121 open_nodes_remove_cb(link_t *link)
     120static void open_nodes_remove_cb(link_t *link)
    122121{
    123122        /* We don't use remove callback for this hash table */
     
    130129};
    131130
    132 int
    133 mfs_global_init(void)
     131int mfs_global_init(void)
    134132{
    135133        if (!hash_table_create(&open_nodes, OPEN_NODES_BUCKETS,
    136             OPEN_NODES_KEYS, &open_nodes_ops)) {
     134                        OPEN_NODES_KEYS, &open_nodes_ops)) {
    137135                return ENOMEM;
    138136        }
     
    142140static int
    143141mfs_mounted(service_id_t service_id, const char *opts, fs_index_t *index,
    144     aoff64_t *size, unsigned *linkcnt)
     142                aoff64_t *size, unsigned *linkcnt)
    145143{
    146144        enum cache_mode cmode;
     
    165163                return rc;
    166164
    167         /* Allocate space for generic MFS superblock */
     165        /*Allocate space for generic MFS superblock*/
    168166        sbi = malloc(sizeof(*sbi));
    169167        if (!sbi) {
     
    172170        }
    173171
    174         /* Allocate space for filesystem instance */
     172        /*Allocate space for filesystem instance*/
    175173        instance = malloc(sizeof(*instance));
    176174        if (!instance) {
     
    193191
    194192        if (check_magic_number(sb->s_magic, &native, &version, &longnames)) {
    195                 /* This is a V1 or V2 Minix filesystem */
     193                /*This is a V1 or V2 Minix filesystem*/
    196194                magic = sb->s_magic;
    197195        } else if (check_magic_number(sb3->s_magic, &native, &version, &longnames)) {
    198                 /* This is a V3 Minix filesystem */
     196                /*This is a V3 Minix filesystem*/
    199197                magic = sb3->s_magic;
    200198        } else {
    201                 /* Not recognized */
     199                /*Not recognized*/
    202200                mfsdebug("magic number not recognized\n");
    203201                rc = ENOTSUP;
     
    207205        mfsdebug("magic number recognized = %04x\n", magic);
    208206
    209         /* Fill superblock info structure */
     207        /*Fill superblock info structure*/
    210208
    211209        sbi->fs_version = version;
     
    245243                sbi->dirsize = longnames ? MFSL_DIRSIZE : MFS_DIRSIZE;
    246244                sbi->max_name_len = longnames ? MFS_L_MAX_NAME_LEN :
    247                     MFS_MAX_NAME_LEN;
     245                                    MFS_MAX_NAME_LEN;
    248246        }
    249247
     
    269267        }
    270268
    271         /* Initialize the instance structure and remember it */
     269        /*Initialize the instance structure and remember it*/
    272270        instance->service_id = service_id;
    273271        instance->sbi = sbi;
     
    275273        rc = fs_instance_create(service_id, instance);
    276274        if (rc != EOK) {
     275                free(instance);
     276                free(sbi);
    277277                block_cache_fini(service_id);
     278                block_fini(service_id);
    278279                mfsdebug("fs instance creation failed\n");
    279                 goto out_error;
     280                return rc;
    280281        }
    281282
     
    330331}
    331332
    332 service_id_t
    333 mfs_service_get(fs_node_t *fsnode)
     333service_id_t mfs_service_get(fs_node_t *fsnode)
    334334{
    335335        struct mfs_node *node = fsnode->data;
     
    337337}
    338338
    339 static int
    340 mfs_create_node(fs_node_t **rfn, service_id_t service_id, int flags)
     339static int mfs_create_node(fs_node_t **rfn, service_id_t service_id, int flags)
    341340{
    342341        int r;
     
    352351                return r;
    353352
    354         /* Alloc a new inode */
     353        /*Alloc a new inode*/
    355354        r = mfs_alloc_inode(inst, &inum);
    356355        if (r != EOK)
     
    379378        if (flags & L_DIRECTORY) {
    380379                ino_i->i_mode = S_IFDIR;
    381                 ino_i->i_nlinks = 2; /* This accounts for the '.' dentry */
     380                ino_i->i_nlinks = 2; /*This accounts for the '.' dentry*/
    382381        } else {
    383382                ino_i->i_mode = S_IFREG;
     
    432431}
    433432
    434 static int
    435 mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
     433static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
    436434{
    437435        struct mfs_node *mnode = pfn->data;
     
    455453
    456454                if (!d_info.d_inum) {
    457                         /* This entry is not used */
     455                        /*This entry is not used*/
    458456                        continue;
    459457                }
     
    462460
    463461                if (comp_size == dentry_name_size &&
    464                     !bcmp(component, d_info.d_name, dentry_name_size)) {
    465                         /* Hit! */
     462                        !bcmp(component, d_info.d_name, dentry_name_size)) {
     463                        /*Hit!*/
    466464                        mfs_node_core_get(rfn, mnode->instance,
    467                             d_info.d_inum);
     465                                          d_info.d_inum);
    468466                        goto found;
    469467                }
     
    474472}
    475473
    476 static aoff64_t
    477 mfs_size_get(fs_node_t *node)
     474static aoff64_t mfs_size_get(fs_node_t *node)
    478475{
    479476        const struct mfs_node *mnode = node->data;
     
    483480static int
    484481mfs_node_get(fs_node_t **rfn, service_id_t service_id,
    485     fs_index_t index)
     482                        fs_index_t index)
    486483{
    487484        int rc;
     
    527524}
    528525
    529 static int
    530 mfs_node_open(fs_node_t *fsnode)
     526static int mfs_node_open(fs_node_t *fsnode)
    531527{
    532528        /*
     
    537533}
    538534
    539 static fs_index_t
    540 mfs_index_get(fs_node_t *fsnode)
     535static fs_index_t mfs_index_get(fs_node_t *fsnode)
    541536{
    542537        struct mfs_node *mnode = fsnode->data;
     
    544539}
    545540
    546 static unsigned
    547 mfs_lnkcnt_get(fs_node_t *fsnode)
     541static unsigned mfs_lnkcnt_get(fs_node_t *fsnode)
    548542{
    549543        struct mfs_node *mnode = fsnode->data;
     
    560554}
    561555
    562 static int
    563 mfs_node_core_get(fs_node_t **rfn, struct mfs_instance *inst,
    564     fs_index_t index)
     556static int mfs_node_core_get(fs_node_t **rfn, struct mfs_instance *inst,
     557                             fs_index_t index)
    565558{
    566559        fs_node_t *node = NULL;
     
    634627}
    635628
    636 static bool
    637 mfs_is_directory(fs_node_t *fsnode)
     629static bool mfs_is_directory(fs_node_t *fsnode)
    638630{
    639631        const struct mfs_node *node = fsnode->data;
     
    641633}
    642634
    643 static bool
    644 mfs_is_file(fs_node_t *fsnode)
     635static bool mfs_is_file(fs_node_t *fsnode)
    645636{
    646637        struct mfs_node *node = fsnode->data;
     
    648639}
    649640
    650 static int
    651 mfs_root_get(fs_node_t **rfn, service_id_t service_id)
     641static int mfs_root_get(fs_node_t **rfn, service_id_t service_id)
    652642{
    653643        int rc = mfs_node_get(rfn, service_id, MFS_ROOT_INO);
     
    655645}
    656646
    657 static int
    658 mfs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name)
     647static int mfs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name)
    659648{
    660649        struct mfs_node *parent = pfn->data;
     
    731720}
    732721
    733 static int
    734 mfs_has_children(bool *has_children, fs_node_t *fsnode)
     722static int mfs_has_children(bool *has_children, fs_node_t *fsnode)
    735723{
    736724        struct mfs_node *mnode = fsnode->data;
     
    753741
    754742                if (d_info.d_inum) {
    755                         /* A valid entry has been found */
     743                        /*A valid entry has been found*/
    756744                        *has_children = true;
    757745                        break;
     
    765753static int
    766754mfs_read(service_id_t service_id, fs_index_t index, aoff64_t pos,
    767     size_t *rbytes)
     755                size_t *rbytes)
    768756{
    769757        int rc;
     
    795783
    796784                if (pos < 2) {
    797                         /* Skip the first two dentries ('.' and '..') */
     785                        /*Skip the first two dentries ('.' and '..')*/
    798786                        pos = 2;
    799787                }
     
    805793
    806794                        if (d_info.d_inum) {
    807                                 /* Dentry found! */
     795                                /*Dentry found!*/
    808796                                goto found;
    809797                        }
     
    821809
    822810                if (pos >= (size_t) ino_i->i_size) {
    823                         /* Trying to read beyond the end of file */
     811                        /*Trying to read beyond the end of file*/
    824812                        bytes = 0;
    825813                        (void) async_data_read_finalize(callid, NULL, 0);
     
    838826
    839827                if (zone == 0) {
    840                         /* sparse file */
     828                        /*sparse file*/
    841829                        uint8_t *buf = malloc(sbi->block_size);
    842830                        if (!buf) {
     
    846834                        memset(buf, 0, sizeof(sbi->block_size));
    847835                        async_data_read_finalize(callid,
    848                             buf + pos % sbi->block_size, bytes);
     836                                                buf + pos % sbi->block_size, bytes);
    849837                        free(buf);
    850838                        goto out_success;
     
    856844
    857845                async_data_read_finalize(callid, b->data +
    858                     pos % sbi->block_size, bytes);
     846                                        pos % sbi->block_size, bytes);
    859847
    860848                rc = block_put(b);
     
    877865static int
    878866mfs_write(service_id_t service_id, fs_index_t index, aoff64_t pos,
    879     size_t *wbytes, aoff64_t *nsize)
     867                size_t *wbytes, aoff64_t *nsize)
    880868{
    881869        fs_node_t *fn;
     
    912900
    913901        if (block == 0) {
     902                /*Writing in a sparse block*/
    914903                uint32_t dummy;
    915904
     
    969958                return ENOENT;
    970959
    971         /* Destroy the inode */
     960        /*Destroy the inode*/
    972961        return mfs_destroy_node(fn);
    973962}
     
    988977        assert(!has_children);
    989978
    990         /* Free the entire inode content */
     979        /*Free the entire inode content*/
    991980        r = mfs_inode_shrink(mnode, mnode->ino_i->i_size);
    992981        if (r != EOK)
    993982                goto out;
    994983
    995         /* Mark the inode as free in the bitmap */
     984        /*Mark the inode as free in the bitmap*/
    996985        r = mfs_free_inode(mnode->instance, mnode->ino_i->index);
    997986
     
    10321021
    10331022        rc = fs_instance_get(service_id, &data);
    1034         if (rc == EOK)
     1023        if (rc == EOK) {
    10351024                *instance = (struct mfs_instance *) data;
    1036         else {
     1025        } else {
    10371026                mfsdebug("instance not found\n");
    10381027        }
     
    10411030}
    10421031
    1043 static bool
    1044 check_magic_number(uint16_t magic, bool *native,
    1045                 mfs_version_t *version, bool *longfilenames)
     1032static bool check_magic_number(uint16_t magic, bool *native,
     1033                               mfs_version_t *version, bool *longfilenames)
    10461034{
    10471035        bool rc = true;
Note: See TracChangeset for help on using the changeset viewer.