Changeset 8b863a62 in mainline for uspace/srv/fs/ext4fs/ext4fs_ops.c
- Timestamp:
- 2014-04-16T17:14:06Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f857e8b
- Parents:
- dba3e2c (diff), 70b570c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/ext4fs/ext4fs_ops.c
rdba3e2c r8b863a62 101 101 static bool ext4fs_is_file(fs_node_t *node); 102 102 static service_id_t ext4fs_service_get(fs_node_t *node); 103 static int ext4fs_size_block(service_id_t, uint32_t *); 104 static int ext4fs_total_block_count(service_id_t, uint64_t *); 105 static int ext4fs_free_block_count(service_id_t, uint64_t *); 103 106 104 107 /* Static variables */ … … 194 197 } 195 198 196 list_foreach(instance_list, link) { 197 ext4fs_instance_t *tmp = 198 list_get_instance(link, ext4fs_instance_t, link); 199 199 list_foreach(instance_list, link, ext4fs_instance_t, tmp) { 200 200 if (tmp->service_id == service_id) { 201 201 *inst = tmp; … … 259 259 rc = ext4fs_node_get_core(rfn, eparent->instance, inode); 260 260 if (rc != EOK) 261 return rc; 262 261 goto exit; 262 263 exit: 264 ; 265 263 266 /* Destroy search result structure */ 264 return ext4_directory_destroy_result(&result); 267 int const rc2 = ext4_directory_destroy_result(&result); 268 return rc == EOK ? rc2 : rc; 265 269 } 266 270 … … 836 840 ext4fs_node_t *enode = EXT4FS_NODE(fn); 837 841 return enode->instance->service_id; 842 } 843 844 int ext4fs_size_block(service_id_t service_id, uint32_t *size) 845 { 846 ext4fs_instance_t *inst; 847 int rc = ext4fs_instance_get(service_id, &inst); 848 if (rc != EOK) 849 return rc; 850 851 if (NULL == inst) 852 return ENOENT; 853 854 ext4_superblock_t *sb = inst->filesystem->superblock; 855 *size = ext4_superblock_get_block_size(sb); 856 857 return EOK; 858 } 859 860 int ext4fs_total_block_count(service_id_t service_id, uint64_t *count) 861 { 862 ext4fs_instance_t *inst; 863 int rc = ext4fs_instance_get(service_id, &inst); 864 if (rc != EOK) 865 return rc; 866 867 if (NULL == inst) 868 return ENOENT; 869 870 ext4_superblock_t *sb = inst->filesystem->superblock; 871 *count = ext4_superblock_get_blocks_count(sb); 872 873 return EOK; 874 } 875 876 int ext4fs_free_block_count(service_id_t service_id, uint64_t *count) 877 { 878 ext4fs_instance_t *inst; 879 int rc = ext4fs_instance_get(service_id, &inst); 880 if (rc != EOK) 881 return rc; 882 883 ext4_superblock_t *sb = inst->filesystem->superblock; 884 *count = ext4_superblock_get_free_blocks_count(sb); 885 886 return EOK; 838 887 } 839 888 … … 857 906 .is_directory = ext4fs_is_directory, 858 907 .is_file = ext4fs_is_file, 859 .service_get = ext4fs_service_get 908 .service_get = ext4fs_service_get, 909 .size_block = ext4fs_size_block, 910 .total_block_count = ext4fs_total_block_count, 911 .free_block_count = ext4fs_free_block_count 860 912 }; 861 913 … … 954 1006 *lnkcnt = 1; 955 1007 956 ext4fs_node_put(root_node); 957 958 return EOK; 1008 return ext4fs_node_put(root_node); 959 1009 } 960 1010 … … 1045 1095 } 1046 1096 1047 ext4_filesystem_put_inode_ref(inode_ref);1048 1049 return rc ;1097 int const rc2 = ext4_filesystem_put_inode_ref(inode_ref); 1098 1099 return rc == EOK ? rc2 : rc; 1050 1100 } 1051 1101 … … 1220 1270 memset(buffer, 0, bytes); 1221 1271 1222 async_data_read_finalize(callid, buffer, bytes);1272 rc = async_data_read_finalize(callid, buffer, bytes); 1223 1273 *rbytes = bytes; 1224 1274 1225 1275 free(buffer); 1226 return EOK;1276 return rc; 1227 1277 } 1228 1278 … … 1236 1286 1237 1287 assert(offset_in_block + bytes <= block_size); 1238 async_data_read_finalize(callid, block->data + offset_in_block, bytes); 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 } 1239 1293 1240 1294 rc = block_put(block); … … 1268 1322 size_t len; 1269 1323 if (!async_data_write_receive(&callid, &len)) { 1270 ext4fs_node_put(fn);1271 async_answer_0(callid, EINVAL);1272 return EINVAL;1324 rc = EINVAL; 1325 async_answer_0(callid, rc); 1326 goto exit; 1273 1327 } 1274 1328 … … 1293 1347 &fblock); 1294 1348 if (rc != EOK) { 1295 ext4fs_node_put(fn);1296 1349 async_answer_0(callid, rc); 1297 return rc;1350 goto exit; 1298 1351 } 1299 1352 … … 1311 1364 &fblock, true); 1312 1365 if (rc != EOK) { 1313 ext4fs_node_put(fn);1314 1366 async_answer_0(callid, rc); 1315 return rc;1367 goto exit; 1316 1368 } 1317 1369 } … … 1320 1372 &fblock, false); 1321 1373 if (rc != EOK) { 1322 ext4fs_node_put(fn);1323 1374 async_answer_0(callid, rc); 1324 return rc;1375 goto exit; 1325 1376 } 1326 1377 } else { 1327 1378 rc = ext4_balloc_alloc_block(inode_ref, &fblock); 1328 1379 if (rc != EOK) { 1329 ext4fs_node_put(fn);1330 1380 async_answer_0(callid, rc); 1331 return rc;1381 goto exit; 1332 1382 } 1333 1383 … … 1336 1386 if (rc != EOK) { 1337 1387 ext4_balloc_free_block(inode_ref, fblock); 1338 ext4fs_node_put(fn);1339 1388 async_answer_0(callid, rc); 1340 return rc;1389 goto exit; 1341 1390 } 1342 1391 } … … 1350 1399 rc = block_get(&write_block, service_id, fblock, flags); 1351 1400 if (rc != EOK) { 1352 ext4fs_node_put(fn);1353 1401 async_answer_0(callid, rc); 1354 return rc;1402 goto exit; 1355 1403 } 1356 1404 1357 1405 if (flags == BLOCK_FLAGS_NOREAD) 1358 1406 memset(write_block->data, 0, block_size); 1359 1407 1360 1408 rc = async_data_write_finalize(callid, write_block->data + 1361 1409 (pos % block_size), bytes); 1362 1410 if (rc != EOK) { 1363 ext4fs_node_put(fn);1364 return rc;1365 } 1366 1411 block_put(write_block); 1412 goto exit; 1413 } 1414 1367 1415 write_block->dirty = true; 1368 1416 1369 1417 rc = block_put(write_block); 1370 if (rc != EOK) { 1371 ext4fs_node_put(fn); 1372 return rc; 1373 } 1374 1418 if (rc != EOK) 1419 goto exit; 1420 1375 1421 /* Do some counting */ 1376 1422 uint32_t old_inode_size = ext4_inode_get_size(fs->superblock, … … 1380 1426 inode_ref->dirty = true; 1381 1427 } 1382 1428 1383 1429 *nsize = ext4_inode_get_size(fs->superblock, inode_ref->inode); 1384 1430 *wbytes = bytes; 1385 1386 return ext4fs_node_put(fn); 1431 1432 exit: 1433 ; 1434 1435 int const rc2 = ext4fs_node_put(fn); 1436 return rc == EOK ? rc2 : rc; 1387 1437 } 1388 1438 … … 1410 1460 1411 1461 rc = ext4_filesystem_truncate_inode(inode_ref, new_size); 1412 ext4fs_node_put(fn);1413 1414 return rc ;1462 int const rc2 = ext4fs_node_put(fn); 1463 1464 return rc == EOK ? rc2 : rc; 1415 1465 } 1416 1466
Note:
See TracChangeset
for help on using the changeset viewer.