Changes in / [f1d6866:45a9cf4] in mainline
- Location:
- uspace
- Files:
-
- 10 deleted
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/mfs/mfs_ops.c
rf1d6866 r45a9cf4 145 145 { 146 146 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; 151 151 bool native, longnames; 152 152 mfs_version_t version; … … 168 168 sbi = malloc(sizeof(*sbi)); 169 169 if (!sbi) { 170 rc = ENOMEM;171 goto out_error;170 block_fini(service_id); 171 return ENOMEM; 172 172 } 173 173 … … 175 175 instance = malloc(sizeof(*instance)); 176 176 if (!instance) { 177 rc = ENOMEM; 178 goto out_error; 177 free(sbi); 178 block_fini(service_id); 179 return ENOMEM; 179 180 } 180 181 … … 183 184 sb = malloc(MFS_SUPERBLOCK_SIZE); 184 185 if (!sb) { 185 rc = ENOMEM; 186 goto out_error; 186 free(instance); 187 free(sbi); 188 block_fini(service_id); 189 return ENOMEM; 187 190 } 188 191 189 192 /* Read the superblock */ 190 193 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 } 193 201 194 202 sb3 = (struct mfs3_superblock *) sb; … … 203 211 /*Not recognized*/ 204 212 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; 207 218 } 208 219 … … 249 260 MFS_MAX_NAME_LEN; 250 261 } 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 filesystems257 * where the size of a zone is equal to the258 * size of a block.259 */260 rc = ENOTSUP;261 goto out_error;262 }263 264 262 sbi->itable_off = 2 + sbi->ibmap_blocks + sbi->zbmap_blocks; 263 264 free(sb); 265 265 266 266 rc = block_cache_init(service_id, sbi->block_size, 0, cmode); 267 267 if (rc != EOK) { 268 free(instance); 269 free(sbi); 270 free(sb); 271 block_cache_fini(service_id); 272 block_fini(service_id); 268 273 mfsdebug("block cache initialization failed\n"); 269 block_cache_fini(service_id); 270 rc = EINVAL; 271 goto out_error; 274 return EINVAL; 272 275 } 273 276 … … 292 295 *linkcnt = 1; 293 296 294 free(sb);295 296 297 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;307 298 } 308 299
Note:
See TracChangeset
for help on using the changeset viewer.