Changes in / [cf982ff:476f62c] in mainline
- Location:
- uspace
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ext4/libext4_balloc.c
rcf982ff r476f62c 91 91 block_t *bitmap_block; 92 92 rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 0); 93 if (rc != EOK) { 94 ext4_filesystem_put_block_group_ref(bg_ref); 95 return rc; 96 } 93 if (rc != EOK) 94 return rc; 97 95 98 96 /* Modify bitmap */ … … 132 130 133 131 /* Release block group reference */ 134 return ext4_filesystem_put_block_group_ref(bg_ref); 132 rc = ext4_filesystem_put_block_group_ref(bg_ref); 133 if (rc != EOK) 134 return rc; 135 136 return EOK; 135 137 } 136 138 … … 171 173 block_t *bitmap_block; 172 174 rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 0); 173 if (rc != EOK) { 174 ext4_filesystem_put_block_group_ref(bg_ref); 175 return rc; 176 } 175 if (rc != EOK) 176 return rc; 177 177 178 178 /* Modify bitmap */ … … 212 212 213 213 /* Release block group reference */ 214 return ext4_filesystem_put_block_group_ref(bg_ref); 214 rc = ext4_filesystem_put_block_group_ref(bg_ref); 215 if (rc != EOK) 216 return rc; 217 218 return EOK; 215 219 } 216 220 … … 260 264 * 261 265 */ 262 static int ext4_balloc_find_goal(ext4_inode_ref_t *inode_ref, uint32_t *goal)266 static uint32_t ext4_balloc_find_goal(ext4_inode_ref_t *inode_ref) 263 267 { 264 *goal = 0; 268 uint32_t goal = 0; 269 265 270 ext4_superblock_t *sb = inode_ref->fs->superblock; 266 271 … … 275 280 if (inode_block_count > 0) { 276 281 int rc = ext4_filesystem_get_inode_data_block_index(inode_ref, 277 inode_block_count - 1, goal);282 inode_block_count - 1, &goal); 278 283 if (rc != EOK) 279 return rc;284 return 0; 280 285 281 286 if (goal != 0) { 282 (*goal)++;283 return EOK;287 goal++; 288 return goal; 284 289 } 285 290 … … 297 302 block_group, &bg_ref); 298 303 if (rc != EOK) 299 return rc;304 return 0; 300 305 301 306 /* Compute indexes */ … … 322 327 inode_table_blocks++; 323 328 324 *goal = inode_table_first_block + inode_table_blocks; 325 326 return ext4_filesystem_put_block_group_ref(bg_ref); 329 goal = inode_table_first_block + inode_table_blocks; 330 331 ext4_filesystem_put_block_group_ref(bg_ref); 332 333 return goal; 327 334 } 328 335 … … 342 349 block_t *bitmap_block; 343 350 uint32_t rel_block_idx = 0; 344 uint32_t goal;345 351 346 352 /* Find GOAL */ 347 int rc = ext4_balloc_find_goal(inode_ref, &goal); 348 if (rc != EOK) 349 return rc; 350 else if (goal == 0) { 353 uint32_t goal = ext4_balloc_find_goal(inode_ref); 354 if (goal == 0) { 351 355 /* no goal found => partition is full */ 352 return ENO MEM;356 return ENOSPC; 353 357 } 354 358 … … 362 366 /* Load block group reference */ 363 367 ext4_block_group_ref_t *bg_ref; 364 rc = ext4_filesystem_get_block_group_ref(inode_ref->fs,368 int rc = ext4_filesystem_get_block_group_ref(inode_ref->fs, 365 369 block_group, &bg_ref); 366 370 if (rc != EOK) … … 463 467 464 468 /* No free block found yet */ 465 rc = block_put(bitmap_block); 466 if (rc != EOK) { 467 ext4_filesystem_put_block_group_ref(bg_ref); 468 return rc; 469 } 470 471 rc = ext4_filesystem_put_block_group_ref(bg_ref); 472 if (rc != EOK) 473 return rc; 469 block_put(bitmap_block); 470 ext4_filesystem_put_block_group_ref(bg_ref); 474 471 475 472 /* Try other block groups */ … … 515 512 bitmap_block->dirty = true; 516 513 rc = block_put(bitmap_block); 517 if (rc != EOK) { 518 ext4_filesystem_put_block_group_ref(bg_ref); 514 if (rc != EOK) 519 515 return rc; 520 }521 516 522 517 allocated_block = … … 533 528 bitmap_block->dirty = true; 534 529 rc = block_put(bitmap_block); 535 if (rc != EOK) { 536 ext4_filesystem_put_block_group_ref(bg_ref); 530 if (rc != EOK) 537 531 return rc; 538 }539 532 540 533 allocated_block = … … 545 538 } 546 539 547 rc = block_put(bitmap_block); 548 if (rc != EOK) { 549 ext4_filesystem_put_block_group_ref(bg_ref); 550 return rc; 551 } 552 553 rc = ext4_filesystem_put_block_group_ref(bg_ref); 554 if (rc != EOK) 555 return rc; 540 block_put(bitmap_block); 541 ext4_filesystem_put_block_group_ref(bg_ref); 556 542 557 543 /* Goto next group */ … … 588 574 bg_ref->dirty = true; 589 575 590 rc =ext4_filesystem_put_block_group_ref(bg_ref);576 ext4_filesystem_put_block_group_ref(bg_ref); 591 577 592 578 *fblock = allocated_block; 593 return rc;579 return EOK; 594 580 } 595 581 … … 606 592 bool *free) 607 593 { 608 int rc ;594 int rc = EOK; 609 595 610 596 ext4_filesystem_t *fs = inode_ref->fs; … … 627 613 block_t *bitmap_block; 628 614 rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 0); 629 if (rc != EOK) { 630 ext4_filesystem_put_block_group_ref(bg_ref); 631 return rc; 632 } 615 if (rc != EOK) 616 return rc; 633 617 634 618 /* Check if block is free */ -
uspace/lib/ext4/libext4_directory_index.c
rcf982ff r476f62c 527 527 528 528 /* Don't forget to put old block (prevent memory leak) */ 529 rc = block_put(p->block); 530 if (rc != EOK) 531 return rc; 529 block_put(p->block); 532 530 533 531 p->block = block; … … 555 553 /* Load direct block 0 (index root) */ 556 554 uint32_t root_block_addr; 557 int rc2;558 555 int rc = ext4_filesystem_get_inode_data_block_index(inode_ref, 0, 559 556 &root_block_addr); … … 623 620 624 621 /* Not found, leave untouched */ 625 rc2 = block_put(leaf_block); 626 if (rc2 != EOK) 627 goto cleanup; 622 block_put(leaf_block); 628 623 629 624 if (rc != ENOENT) … … 633 628 rc = ext4_directory_dx_next_block(inode_ref, hinfo.hash, 634 629 dx_block, &dx_blocks[0]); 635 if (rc != EOK)630 if (rc < 0) 636 631 goto cleanup; 637 638 632 } while (rc == ENOENT); 639 633 … … 646 640 647 641 while (tmp <= dx_block) { 648 rc2 = block_put(tmp->block); 649 if (rc == EOK && rc2 != EOK) 650 rc = rc2; 642 block_put(tmp->block); 651 643 ++tmp; 652 644 } -
uspace/lib/ext4/libext4_extent.c
rcf982ff r476f62c 371 371 uint32_t *fblock) 372 372 { 373 int rc;374 373 /* Compute bound defined by i-node size */ 375 374 uint64_t inode_size = … … 401 400 uint64_t child = ext4_extent_index_get_leaf(index); 402 401 403 if (block != NULL) { 404 rc = block_put(block); 405 if (rc != EOK) 406 return rc; 407 } 408 409 rc = block_get(&block, inode_ref->fs->device, child, 402 if (block != NULL) 403 block_put(block); 404 405 int rc = block_get(&block, inode_ref->fs->device, child, 410 406 BLOCK_FLAGS_NONE); 411 407 if (rc != EOK) … … 433 429 /* Cleanup */ 434 430 if (block != NULL) 435 rc =block_put(block);436 437 return rc;431 block_put(block); 432 433 return EOK; 438 434 } 439 435 … … 509 505 510 506 cleanup: 511 ;512 513 int rc2 = EOK;514 515 507 /* 516 508 * Put loaded blocks … … 518 510 */ 519 511 for (uint16_t i = 1; i < tmp_path->depth; ++i) { 520 if (tmp_path[i].block) { 521 rc2 = block_put(tmp_path[i].block); 522 if (rc == EOK && rc2 != EOK) 523 rc = rc2; 524 } 512 if (tmp_path[i].block) 513 block_put(tmp_path[i].block); 525 514 } 526 515 … … 605 594 return rc; 606 595 607 return ext4_balloc_free_block(inode_ref, fblock); 596 ext4_balloc_free_block(inode_ref, fblock); 597 598 return EOK; 608 599 } 609 600 … … 730 721 731 722 cleanup: 732 ;733 734 int rc2 = EOK;735 736 723 /* 737 724 * Put loaded blocks … … 739 726 */ 740 727 for (uint16_t i = 1; i <= path->depth; ++i) { 741 if (path[i].block) { 742 rc2 = block_put(path[i].block); 743 if (rc == EOK && rc2 != EOK) 744 rc = rc2; 745 } 728 if (path[i].block) 729 block_put(path[i].block); 746 730 } 747 731 … … 794 778 795 779 /* Put back not modified old block */ 796 rc = block_put(path_ptr->block); 797 if (rc != EOK) { 798 ext4_balloc_free_block(inode_ref, fblock); 799 return rc; 800 } 780 block_put(path_ptr->block); 801 781 802 782 /* Initialize newly allocated block and remember it */ … … 1081 1061 1082 1062 finish: 1083 ;1084 1085 int rc2 = EOK;1086 1087 1063 /* Set return values */ 1088 1064 *iblock = new_block_idx; … … 1094 1070 */ 1095 1071 for (uint16_t i = 1; i <= path->depth; ++i) { 1096 if (path[i].block) { 1097 rc2 = block_put(path[i].block); 1098 if (rc == EOK && rc2 != EOK) 1099 rc = rc2; 1100 } 1072 if (path[i].block) 1073 block_put(path[i].block); 1101 1074 } 1102 1075 -
uspace/lib/ext4/libext4_filesystem.c
rcf982ff r476f62c 797 797 } 798 798 799 rc = block_put(block); 800 if (rc != EOK) 801 return rc; 802 799 block_put(block); 803 800 rc = ext4_balloc_free_block(inode_ref, fblock); 804 801 if (rc != EOK) … … 844 841 } 845 842 846 rc = block_put(subblock); 847 if (rc != EOK) 848 return rc; 843 block_put(subblock); 849 844 } 850 845 … … 856 851 } 857 852 858 rc = block_put(block); 859 if (rc != EOK) 860 return rc; 861 853 block_put(block); 862 854 rc = ext4_balloc_free_block(inode_ref, fblock); 863 855 if (rc != EOK) -
uspace/lib/ext4/libext4_ialloc.c
rcf982ff r476f62c 204 204 rc = block_get(&bitmap_block, fs->device, bitmap_block_addr, 205 205 BLOCK_FLAGS_NONE); 206 if (rc != EOK) { 207 ext4_filesystem_put_block_group_ref(bg_ref); 206 if (rc != EOK) 208 207 return rc; 209 }210 208 211 209 /* Try to allocate i-node in the bitmap */ … … 217 215 /* Block group has not any free i-node */ 218 216 if (rc == ENOSPC) { 219 rc = block_put(bitmap_block); 220 if (rc != EOK) { 221 ext4_filesystem_put_block_group_ref(bg_ref); 222 return rc; 223 } 224 225 rc = ext4_filesystem_put_block_group_ref(bg_ref); 226 if (rc != EOK) 227 return rc; 228 229 bgid++; 217 block_put(bitmap_block); 218 ext4_filesystem_put_block_group_ref(bg_ref); 230 219 continue; 231 220 } … … 235 224 236 225 rc = block_put(bitmap_block); 237 if (rc != EOK) { 238 ext4_filesystem_put_block_group_ref(bg_ref); 226 if (rc != EOK) 239 227 return rc; 240 }241 228 242 229 /* Modify filesystem counters */ … … 285 272 286 273 /* Block group not modified, put it and jump to the next block group */ 287 rc = ext4_filesystem_put_block_group_ref(bg_ref); 288 if (rc != EOK) 289 return rc; 290 274 ext4_filesystem_put_block_group_ref(bg_ref); 291 275 ++bgid; 292 276 } -
uspace/srv/fs/ext4fs/ext4fs_ops.c
rcf982ff r476f62c 259 259 rc = ext4fs_node_get_core(rfn, eparent->instance, inode); 260 260 if (rc != EOK) 261 goto exit; 262 263 exit: 264 ; 265 261 return rc; 262 266 263 /* Destroy search result structure */ 267 int const rc2 = ext4_directory_destroy_result(&result); 268 return rc == EOK ? rc2 : rc; 264 return ext4_directory_destroy_result(&result); 269 265 } 270 266 … … 1006 1002 *lnkcnt = 1; 1007 1003 1008 return ext4fs_node_put(root_node); 1004 ext4fs_node_put(root_node); 1005 1006 return EOK; 1009 1007 } 1010 1008 … … 1095 1093 } 1096 1094 1097 int const rc2 =ext4_filesystem_put_inode_ref(inode_ref);1098 1099 return rc == EOK ? rc2 : rc;1095 ext4_filesystem_put_inode_ref(inode_ref); 1096 1097 return rc; 1100 1098 } 1101 1099 … … 1270 1268 memset(buffer, 0, bytes); 1271 1269 1272 rc =async_data_read_finalize(callid, buffer, bytes);1270 async_data_read_finalize(callid, buffer, bytes); 1273 1271 *rbytes = bytes; 1274 1272 1275 1273 free(buffer); 1276 return rc;1274 return EOK; 1277 1275 } 1278 1276 … … 1286 1284 1287 1285 assert(offset_in_block + bytes <= block_size); 1288 rc = async_data_read_finalize(callid, block->data + offset_in_block, bytes); 1289 if (rc != EOK) { 1290 block_put(block); 1291 return rc; 1292 } 1286 async_data_read_finalize(callid, block->data + offset_in_block, bytes); 1293 1287 1294 1288 rc = block_put(block); … … 1322 1316 size_t len; 1323 1317 if (!async_data_write_receive(&callid, &len)) { 1324 rc = EINVAL;1325 async_answer_0(callid, rc);1326 goto exit;1318 ext4fs_node_put(fn); 1319 async_answer_0(callid, EINVAL); 1320 return EINVAL; 1327 1321 } 1328 1322 … … 1347 1341 &fblock); 1348 1342 if (rc != EOK) { 1343 ext4fs_node_put(fn); 1349 1344 async_answer_0(callid, rc); 1350 goto exit;1345 return rc; 1351 1346 } 1352 1347 … … 1364 1359 &fblock, true); 1365 1360 if (rc != EOK) { 1361 ext4fs_node_put(fn); 1366 1362 async_answer_0(callid, rc); 1367 goto exit;1363 return rc; 1368 1364 } 1369 1365 } … … 1372 1368 &fblock, false); 1373 1369 if (rc != EOK) { 1370 ext4fs_node_put(fn); 1374 1371 async_answer_0(callid, rc); 1375 goto exit;1372 return rc; 1376 1373 } 1377 1374 } else { 1378 1375 rc = ext4_balloc_alloc_block(inode_ref, &fblock); 1379 1376 if (rc != EOK) { 1377 ext4fs_node_put(fn); 1380 1378 async_answer_0(callid, rc); 1381 goto exit;1379 return rc; 1382 1380 } 1383 1381 … … 1386 1384 if (rc != EOK) { 1387 1385 ext4_balloc_free_block(inode_ref, fblock); 1386 ext4fs_node_put(fn); 1388 1387 async_answer_0(callid, rc); 1389 goto exit;1388 return rc; 1390 1389 } 1391 1390 } … … 1399 1398 rc = block_get(&write_block, service_id, fblock, flags); 1400 1399 if (rc != EOK) { 1400 ext4fs_node_put(fn); 1401 1401 async_answer_0(callid, rc); 1402 goto exit;1403 } 1404 1405 if (flags == BLOCK_FLAGS_NOREAD) {1402 return rc; 1403 } 1404 1405 if (flags == BLOCK_FLAGS_NOREAD) 1406 1406 memset(write_block->data, 0, block_size); 1407 write_block->dirty = true; 1408 } 1409 1407 1410 1408 rc = async_data_write_finalize(callid, write_block->data + 1411 1409 (pos % block_size), bytes); 1412 1410 if (rc != EOK) { 1413 block_put(write_block); 1414 goto exit; 1415 } 1416 1411 ext4fs_node_put(fn); 1412 return rc; 1413 } 1414 1415 write_block->dirty = true; 1416 1417 1417 rc = block_put(write_block); 1418 if (rc != EOK) 1419 goto exit; 1420 1418 if (rc != EOK) { 1419 ext4fs_node_put(fn); 1420 return rc; 1421 } 1422 1421 1423 /* Do some counting */ 1422 1424 uint32_t old_inode_size = ext4_inode_get_size(fs->superblock, … … 1426 1428 inode_ref->dirty = true; 1427 1429 } 1428 1430 1429 1431 *nsize = ext4_inode_get_size(fs->superblock, inode_ref->inode); 1430 1432 *wbytes = bytes; 1431 1432 exit: 1433 ; 1434 1435 int const rc2 = ext4fs_node_put(fn); 1436 return rc == EOK ? rc2 : rc; 1433 1434 return ext4fs_node_put(fn); 1437 1435 } 1438 1436 … … 1460 1458 1461 1459 rc = ext4_filesystem_truncate_inode(inode_ref, new_size); 1462 int const rc2 =ext4fs_node_put(fn);1463 1464 return rc == EOK ? rc2 : rc;1460 ext4fs_node_put(fn); 1461 1462 return rc; 1465 1463 } 1466 1464
Note:
See TracChangeset
for help on using the changeset viewer.