Changes in / [45a9cf4:f1d6866] in mainline


Ignore:
Location:
uspace
Files:
10 added
1 edited

Legend:

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

    r45a9cf4 rf1d6866  
    145145{
    146146        enum cache_mode cmode;
    147         struct mfs_superblock *sb;
    148         struct mfs3_superblock *sb3;
    149         struct mfs_sb_info *sbi;
    150         struct mfs_instance *instance;
     147        struct mfs_superblock *sb = NULL;
     148        struct mfs3_superblock *sb3 = NULL;
     149        struct mfs_sb_info *sbi = NULL;
     150        struct mfs_instance *instance = NULL;
    151151        bool native, longnames;
    152152        mfs_version_t version;
     
    168168        sbi = malloc(sizeof(*sbi));
    169169        if (!sbi) {
    170                 block_fini(service_id);
    171                 return ENOMEM;
     170                rc = ENOMEM;
     171                goto out_error;
    172172        }
    173173
     
    175175        instance = malloc(sizeof(*instance));
    176176        if (!instance) {
    177                 free(sbi);
    178                 block_fini(service_id);
    179                 return ENOMEM;
     177                rc = ENOMEM;
     178                goto out_error;
    180179        }
    181180
     
    184183        sb = malloc(MFS_SUPERBLOCK_SIZE);
    185184        if (!sb) {
    186                 free(instance);
    187                 free(sbi);
    188                 block_fini(service_id);
    189                 return ENOMEM;
     185                rc = ENOMEM;
     186                goto out_error;
    190187        }
    191188
    192189        /* Read the superblock */
    193190        rc = block_read_direct(service_id, MFS_SUPERBLOCK << 1, 2, sb);
    194         if (rc != EOK) {
    195                 free(instance);
    196                 free(sbi);
    197                 free(sb);
    198                 block_fini(service_id);
    199                 return rc;
    200         }
     191        if (rc != EOK)
     192                goto out_error;
    201193
    202194        sb3 = (struct mfs3_superblock *) sb;
     
    211203                /*Not recognized*/
    212204                mfsdebug("magic number not recognized\n");
    213                 free(instance);
    214                 free(sbi);
    215                 free(sb);
    216                 block_fini(service_id);
    217                 return ENOTSUP;
     205                rc = ENOTSUP;
     206                goto out_error;
    218207        }
    219208
     
    260249                                    MFS_MAX_NAME_LEN;
    261250        }
     251
     252        if (sbi->log2_zone_size != 0) {
     253                /* In MFS, file space is allocated per zones.
     254                 * Zones are a collection of consecutive blocks on disk.
     255                 *
     256                 * The current MFS implementation supports only filesystems
     257                 * where the size of a zone is equal to the
     258                 * size of a block.
     259                 */
     260                rc = ENOTSUP;
     261                goto out_error;
     262        }
     263
    262264        sbi->itable_off = 2 + sbi->ibmap_blocks + sbi->zbmap_blocks;
    263 
    264         free(sb);
    265265
    266266        rc = block_cache_init(service_id, sbi->block_size, 0, cmode);
    267267        if (rc != EOK) {
    268                 free(instance);
    269                 free(sbi);
    270                 free(sb);
     268                mfsdebug("block cache initialization failed\n");
    271269                block_cache_fini(service_id);
    272                 block_fini(service_id);
    273                 mfsdebug("block cache initialization failed\n");
    274                 return EINVAL;
     270                rc = EINVAL;
     271                goto out_error;
    275272        }
    276273
     
    295292        *linkcnt = 1;
    296293
     294        free(sb);
     295
    297296        return mfs_node_put(fn);
     297
     298out_error:
     299        block_fini(service_id);
     300        if (sb)
     301                free(sb);
     302        if (sbi)
     303                free(sbi);
     304        if(instance)
     305                free(instance);
     306        return rc;
    298307}
    299308
Note: See TracChangeset for help on using the changeset viewer.