Changes in / [f1d6866:45a9cf4] in mainline


Ignore:
Location:
uspace
Files:
10 deleted
1 edited

Legend:

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

    rf1d6866 r45a9cf4  
    145145{
    146146        enum cache_mode cmode;
    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;
     147        struct mfs_superblock *sb;
     148        struct mfs3_superblock *sb3;
     149        struct mfs_sb_info *sbi;
     150        struct mfs_instance *instance;
    151151        bool native, longnames;
    152152        mfs_version_t version;
     
    168168        sbi = malloc(sizeof(*sbi));
    169169        if (!sbi) {
    170                 rc = ENOMEM;
    171                 goto out_error;
     170                block_fini(service_id);
     171                return ENOMEM;
    172172        }
    173173
     
    175175        instance = malloc(sizeof(*instance));
    176176        if (!instance) {
    177                 rc = ENOMEM;
    178                 goto out_error;
     177                free(sbi);
     178                block_fini(service_id);
     179                return ENOMEM;
    179180        }
    180181
     
    183184        sb = malloc(MFS_SUPERBLOCK_SIZE);
    184185        if (!sb) {
    185                 rc = ENOMEM;
    186                 goto out_error;
     186                free(instance);
     187                free(sbi);
     188                block_fini(service_id);
     189                return ENOMEM;
    187190        }
    188191
    189192        /* Read the superblock */
    190193        rc = block_read_direct(service_id, MFS_SUPERBLOCK << 1, 2, sb);
    191         if (rc != EOK)
    192                 goto out_error;
     194        if (rc != EOK) {
     195                free(instance);
     196                free(sbi);
     197                free(sb);
     198                block_fini(service_id);
     199                return rc;
     200        }
    193201
    194202        sb3 = (struct mfs3_superblock *) sb;
     
    203211                /*Not recognized*/
    204212                mfsdebug("magic number not recognized\n");
    205                 rc = ENOTSUP;
    206                 goto out_error;
     213                free(instance);
     214                free(sbi);
     215                free(sb);
     216                block_fini(service_id);
     217                return ENOTSUP;
    207218        }
    208219
     
    249260                                    MFS_MAX_NAME_LEN;
    250261        }
    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 
    264262        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);
     271                block_cache_fini(service_id);
     272                block_fini(service_id);
    268273                mfsdebug("block cache initialization failed\n");
    269                 block_cache_fini(service_id);
    270                 rc = EINVAL;
    271                 goto out_error;
     274                return EINVAL;
    272275        }
    273276
     
    292295        *linkcnt = 1;
    293296
    294         free(sb);
    295 
    296297        return mfs_node_put(fn);
    297 
    298 out_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;
    307298}
    308299
Note: See TracChangeset for help on using the changeset viewer.