Ignore:
File:
1 edited

Legend:

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

    r36cb22f r6d4d883  
    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);
    48 
     47    fs_index_t index);
    4948static int mfs_node_put(fs_node_t *fsnode);
    5049static int mfs_node_open(fs_node_t *fsnode);
     
    6463static hash_index_t open_nodes_hash(unsigned long key[]);
    6564static int open_nodes_compare(unsigned long key[], hash_count_t keys,
    66                 link_t *item);
     65    link_t *item);
    6766static void open_nodes_remove_cb(link_t *link);
    68 
    6967static int mfs_node_get(fs_node_t **rfn, service_id_t service_id,
    70                         fs_index_t index);
    71 static int
    72 mfs_instance_get(service_id_t service_id, struct mfs_instance **instance);
     68    fs_index_t index);
     69static int mfs_instance_get(service_id_t service_id,
     70    struct mfs_instance **instance);
    7371
    7472
     
    9694
    9795/* Hash table interface for open nodes hash table */
    98 static hash_index_t open_nodes_hash(unsigned long key[])
     96static hash_index_t
     97open_nodes_hash(unsigned long key[])
    9998{
    10099        /* TODO: This is very simple and probably can be improved */
     
    102101}
    103102
    104 static int open_nodes_compare(unsigned long key[], hash_count_t keys,
    105                 link_t *item)
     103static int
     104open_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 open_nodes_remove_cb(link_t *link)
     120static void
     121open_nodes_remove_cb(link_t *link)
    121122{
    122123        /* We don't use remove callback for this hash table */
     
    129130};
    130131
    131 int mfs_global_init(void)
     132int
     133mfs_global_init(void)
    132134{
    133135        if (!hash_table_create(&open_nodes, OPEN_NODES_BUCKETS,
    134                         OPEN_NODES_KEYS, &open_nodes_ops)) {
     136            OPEN_NODES_KEYS, &open_nodes_ops)) {
    135137                return ENOMEM;
    136138        }
     
    140142static int
    141143mfs_mounted(service_id_t service_id, const char *opts, fs_index_t *index,
    142                 aoff64_t *size, unsigned *linkcnt)
     144    aoff64_t *size, unsigned *linkcnt)
    143145{
    144146        enum cache_mode cmode;
     
    163165                return rc;
    164166
    165         /*Allocate space for generic MFS superblock*/
     167        /* Allocate space for generic MFS superblock */
    166168        sbi = malloc(sizeof(*sbi));
    167169        if (!sbi) {
     
    170172        }
    171173
    172         /*Allocate space for filesystem instance*/
     174        /* Allocate space for filesystem instance */
    173175        instance = malloc(sizeof(*instance));
    174176        if (!instance) {
     
    191193
    192194        if (check_magic_number(sb->s_magic, &native, &version, &longnames)) {
    193                 /*This is a V1 or V2 Minix filesystem*/
     195                /* This is a V1 or V2 Minix filesystem */
    194196                magic = sb->s_magic;
    195197        } else if (check_magic_number(sb3->s_magic, &native, &version, &longnames)) {
    196                 /*This is a V3 Minix filesystem*/
     198                /* This is a V3 Minix filesystem */
    197199                magic = sb3->s_magic;
    198200        } else {
    199                 /*Not recognized*/
     201                /* Not recognized */
    200202                mfsdebug("magic number not recognized\n");
    201203                rc = ENOTSUP;
     
    205207        mfsdebug("magic number recognized = %04x\n", magic);
    206208
    207         /*Fill superblock info structure*/
     209        /* Fill superblock info structure */
    208210
    209211        sbi->fs_version = version;
     
    243245                sbi->dirsize = longnames ? MFSL_DIRSIZE : MFS_DIRSIZE;
    244246                sbi->max_name_len = longnames ? MFS_L_MAX_NAME_LEN :
    245                                     MFS_MAX_NAME_LEN;
     247                    MFS_MAX_NAME_LEN;
    246248        }
    247249
     
    267269        }
    268270
    269         /*Initialize the instance structure and remember it*/
     271        /* Initialize the instance structure and remember it */
    270272        instance->service_id = service_id;
    271273        instance->sbi = sbi;
     
    273275        rc = fs_instance_create(service_id, instance);
    274276        if (rc != EOK) {
    275                 free(instance);
    276                 free(sbi);
    277277                block_cache_fini(service_id);
    278                 block_fini(service_id);
    279278                mfsdebug("fs instance creation failed\n");
    280                 return rc;
     279                goto out_error;
    281280        }
    282281
     
    331330}
    332331
    333 service_id_t mfs_service_get(fs_node_t *fsnode)
     332service_id_t
     333mfs_service_get(fs_node_t *fsnode)
    334334{
    335335        struct mfs_node *node = fsnode->data;
     
    337337}
    338338
    339 static int mfs_create_node(fs_node_t **rfn, service_id_t service_id, int flags)
     339static int
     340mfs_create_node(fs_node_t **rfn, service_id_t service_id, int flags)
    340341{
    341342        int r;
     
    351352                return r;
    352353
    353         /*Alloc a new inode*/
     354        /* Alloc a new inode */
    354355        r = mfs_alloc_inode(inst, &inum);
    355356        if (r != EOK)
     
    378379        if (flags & L_DIRECTORY) {
    379380                ino_i->i_mode = S_IFDIR;
    380                 ino_i->i_nlinks = 2; /*This accounts for the '.' dentry*/
     381                ino_i->i_nlinks = 2; /* This accounts for the '.' dentry */
    381382        } else {
    382383                ino_i->i_mode = S_IFREG;
     
    431432}
    432433
    433 static int mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
     434static int
     435mfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
    434436{
    435437        struct mfs_node *mnode = pfn->data;
     
    453455
    454456                if (!d_info.d_inum) {
    455                         /*This entry is not used*/
     457                        /* This entry is not used */
    456458                        continue;
    457459                }
     
    460462
    461463                if (comp_size == dentry_name_size &&
    462                         !bcmp(component, d_info.d_name, dentry_name_size)) {
    463                         /*Hit!*/
     464                    !bcmp(component, d_info.d_name, dentry_name_size)) {
     465                        /* Hit! */
    464466                        mfs_node_core_get(rfn, mnode->instance,
    465                                           d_info.d_inum);
     467                            d_info.d_inum);
    466468                        goto found;
    467469                }
     
    472474}
    473475
    474 static aoff64_t mfs_size_get(fs_node_t *node)
     476static aoff64_t
     477mfs_size_get(fs_node_t *node)
    475478{
    476479        const struct mfs_node *mnode = node->data;
     
    480483static int
    481484mfs_node_get(fs_node_t **rfn, service_id_t service_id,
    482                         fs_index_t index)
     485    fs_index_t index)
    483486{
    484487        int rc;
     
    524527}
    525528
    526 static int mfs_node_open(fs_node_t *fsnode)
     529static int
     530mfs_node_open(fs_node_t *fsnode)
    527531{
    528532        /*
     
    533537}
    534538
    535 static fs_index_t mfs_index_get(fs_node_t *fsnode)
     539static fs_index_t
     540mfs_index_get(fs_node_t *fsnode)
    536541{
    537542        struct mfs_node *mnode = fsnode->data;
     
    539544}
    540545
    541 static unsigned mfs_lnkcnt_get(fs_node_t *fsnode)
     546static unsigned
     547mfs_lnkcnt_get(fs_node_t *fsnode)
    542548{
    543549        struct mfs_node *mnode = fsnode->data;
     
    554560}
    555561
    556 static int mfs_node_core_get(fs_node_t **rfn, struct mfs_instance *inst,
    557                              fs_index_t index)
     562static int
     563mfs_node_core_get(fs_node_t **rfn, struct mfs_instance *inst,
     564    fs_index_t index)
    558565{
    559566        fs_node_t *node = NULL;
     
    627634}
    628635
    629 static bool mfs_is_directory(fs_node_t *fsnode)
     636static bool
     637mfs_is_directory(fs_node_t *fsnode)
    630638{
    631639        const struct mfs_node *node = fsnode->data;
     
    633641}
    634642
    635 static bool mfs_is_file(fs_node_t *fsnode)
     643static bool
     644mfs_is_file(fs_node_t *fsnode)
    636645{
    637646        struct mfs_node *node = fsnode->data;
     
    639648}
    640649
    641 static int mfs_root_get(fs_node_t **rfn, service_id_t service_id)
     650static int
     651mfs_root_get(fs_node_t **rfn, service_id_t service_id)
    642652{
    643653        int rc = mfs_node_get(rfn, service_id, MFS_ROOT_INO);
     
    645655}
    646656
    647 static int mfs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name)
     657static int
     658mfs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name)
    648659{
    649660        struct mfs_node *parent = pfn->data;
     
    720731}
    721732
    722 static int mfs_has_children(bool *has_children, fs_node_t *fsnode)
     733static int
     734mfs_has_children(bool *has_children, fs_node_t *fsnode)
    723735{
    724736        struct mfs_node *mnode = fsnode->data;
     
    741753
    742754                if (d_info.d_inum) {
    743                         /*A valid entry has been found*/
     755                        /* A valid entry has been found */
    744756                        *has_children = true;
    745757                        break;
     
    753765static int
    754766mfs_read(service_id_t service_id, fs_index_t index, aoff64_t pos,
    755                 size_t *rbytes)
     767    size_t *rbytes)
    756768{
    757769        int rc;
     
    783795
    784796                if (pos < 2) {
    785                         /*Skip the first two dentries ('.' and '..')*/
     797                        /* Skip the first two dentries ('.' and '..') */
    786798                        pos = 2;
    787799                }
     
    793805
    794806                        if (d_info.d_inum) {
    795                                 /*Dentry found!*/
     807                                /* Dentry found! */
    796808                                goto found;
    797809                        }
     
    809821
    810822                if (pos >= (size_t) ino_i->i_size) {
    811                         /*Trying to read beyond the end of file*/
     823                        /* Trying to read beyond the end of file */
    812824                        bytes = 0;
    813825                        (void) async_data_read_finalize(callid, NULL, 0);
     
    826838
    827839                if (zone == 0) {
    828                         /*sparse file*/
     840                        /* sparse file */
    829841                        uint8_t *buf = malloc(sbi->block_size);
    830842                        if (!buf) {
     
    834846                        memset(buf, 0, sizeof(sbi->block_size));
    835847                        async_data_read_finalize(callid,
    836                                                 buf + pos % sbi->block_size, bytes);
     848                            buf + pos % sbi->block_size, bytes);
    837849                        free(buf);
    838850                        goto out_success;
     
    844856
    845857                async_data_read_finalize(callid, b->data +
    846                                         pos % sbi->block_size, bytes);
     858                    pos % sbi->block_size, bytes);
    847859
    848860                rc = block_put(b);
     
    865877static int
    866878mfs_write(service_id_t service_id, fs_index_t index, aoff64_t pos,
    867                 size_t *wbytes, aoff64_t *nsize)
     879    size_t *wbytes, aoff64_t *nsize)
    868880{
    869881        fs_node_t *fn;
     
    900912
    901913        if (block == 0) {
    902                 /*Writing in a sparse block*/
    903914                uint32_t dummy;
    904915
     
    958969                return ENOENT;
    959970
    960         /*Destroy the inode*/
     971        /* Destroy the inode */
    961972        return mfs_destroy_node(fn);
    962973}
     
    977988        assert(!has_children);
    978989
    979         /*Free the entire inode content*/
     990        /* Free the entire inode content */
    980991        r = mfs_inode_shrink(mnode, mnode->ino_i->i_size);
    981992        if (r != EOK)
    982993                goto out;
    983994
    984         /*Mark the inode as free in the bitmap*/
     995        /* Mark the inode as free in the bitmap */
    985996        r = mfs_free_inode(mnode->instance, mnode->ino_i->index);
    986997
     
    10211032
    10221033        rc = fs_instance_get(service_id, &data);
    1023         if (rc == EOK) {
     1034        if (rc == EOK)
    10241035                *instance = (struct mfs_instance *) data;
    1025         } else {
     1036        else {
    10261037                mfsdebug("instance not found\n");
    10271038        }
     
    10301041}
    10311042
    1032 static bool check_magic_number(uint16_t magic, bool *native,
    1033                                mfs_version_t *version, bool *longfilenames)
     1043static bool
     1044check_magic_number(uint16_t magic, bool *native,
     1045                mfs_version_t *version, bool *longfilenames)
    10341046{
    10351047        bool rc = true;
Note: See TracChangeset for help on using the changeset viewer.