Changes in uspace/srv/fs/ext4fs/ext4fs_ops.c [89dcf93:d1538a1] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/ext4fs/ext4fs_ops.c
r89dcf93 rd1538a1 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 *);106 103 107 104 /* Static variables */ … … 197 194 } 198 195 199 list_foreach(instance_list, link, ext4fs_instance_t, tmp) { 196 list_foreach(instance_list, link) { 197 ext4fs_instance_t *tmp = 198 list_get_instance(link, ext4fs_instance_t, link); 199 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 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 … … 840 836 ext4fs_node_t *enode = EXT4FS_NODE(fn); 841 837 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;887 838 } 888 839 … … 906 857 .is_directory = ext4fs_is_directory, 907 858 .is_file = ext4fs_is_file, 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 859 .service_get = ext4fs_service_get 912 860 }; 913 861 … … 1006 954 *lnkcnt = 1; 1007 955 1008 return ext4fs_node_put(root_node); 956 ext4fs_node_put(root_node); 957 958 return EOK; 1009 959 } 1010 960 … … 1095 1045 } 1096 1046 1097 int const rc2 =ext4_filesystem_put_inode_ref(inode_ref);1098 1099 return rc == EOK ? rc2 : rc;1047 ext4_filesystem_put_inode_ref(inode_ref); 1048 1049 return rc; 1100 1050 } 1101 1051 … … 1270 1220 memset(buffer, 0, bytes); 1271 1221 1272 rc =async_data_read_finalize(callid, buffer, bytes);1222 async_data_read_finalize(callid, buffer, bytes); 1273 1223 *rbytes = bytes; 1274 1224 1275 1225 free(buffer); 1276 return rc;1226 return EOK; 1277 1227 } 1278 1228 … … 1286 1236 1287 1237 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 } 1238 async_data_read_finalize(callid, block->data + offset_in_block, bytes); 1293 1239 1294 1240 rc = block_put(block); … … 1322 1268 size_t len; 1323 1269 if (!async_data_write_receive(&callid, &len)) { 1324 rc = EINVAL;1325 async_answer_0(callid, rc);1326 goto exit;1270 ext4fs_node_put(fn); 1271 async_answer_0(callid, EINVAL); 1272 return EINVAL; 1327 1273 } 1328 1274 … … 1347 1293 &fblock); 1348 1294 if (rc != EOK) { 1295 ext4fs_node_put(fn); 1349 1296 async_answer_0(callid, rc); 1350 goto exit;1297 return rc; 1351 1298 } 1352 1299 … … 1364 1311 &fblock, true); 1365 1312 if (rc != EOK) { 1313 ext4fs_node_put(fn); 1366 1314 async_answer_0(callid, rc); 1367 goto exit;1315 return rc; 1368 1316 } 1369 1317 } … … 1372 1320 &fblock, false); 1373 1321 if (rc != EOK) { 1322 ext4fs_node_put(fn); 1374 1323 async_answer_0(callid, rc); 1375 goto exit;1324 return rc; 1376 1325 } 1377 1326 } else { 1378 1327 rc = ext4_balloc_alloc_block(inode_ref, &fblock); 1379 1328 if (rc != EOK) { 1329 ext4fs_node_put(fn); 1380 1330 async_answer_0(callid, rc); 1381 goto exit;1331 return rc; 1382 1332 } 1383 1333 … … 1386 1336 if (rc != EOK) { 1387 1337 ext4_balloc_free_block(inode_ref, fblock); 1338 ext4fs_node_put(fn); 1388 1339 async_answer_0(callid, rc); 1389 goto exit;1340 return rc; 1390 1341 } 1391 1342 } … … 1399 1350 rc = block_get(&write_block, service_id, fblock, flags); 1400 1351 if (rc != EOK) { 1352 ext4fs_node_put(fn); 1401 1353 async_answer_0(callid, rc); 1402 goto exit;1354 return rc; 1403 1355 } 1404 1356 1405 1357 if (flags == BLOCK_FLAGS_NOREAD) 1406 1358 memset(write_block->data, 0, block_size); 1407 1359 1408 1360 rc = async_data_write_finalize(callid, write_block->data + 1409 1361 (pos % block_size), bytes); 1410 1362 if (rc != EOK) { 1411 block_put(write_block);1412 goto exit;1413 } 1414 1363 ext4fs_node_put(fn); 1364 return rc; 1365 } 1366 1415 1367 write_block->dirty = true; 1416 1368 1417 1369 rc = block_put(write_block); 1418 if (rc != EOK) 1419 goto exit; 1420 1370 if (rc != EOK) { 1371 ext4fs_node_put(fn); 1372 return rc; 1373 } 1374 1421 1375 /* Do some counting */ 1422 1376 uint32_t old_inode_size = ext4_inode_get_size(fs->superblock, … … 1426 1380 inode_ref->dirty = true; 1427 1381 } 1428 1382 1429 1383 *nsize = ext4_inode_get_size(fs->superblock, inode_ref->inode); 1430 1384 *wbytes = bytes; 1431 1432 exit: 1433 ; 1434 1435 int const rc2 = ext4fs_node_put(fn); 1436 return rc == EOK ? rc2 : rc; 1385 1386 return ext4fs_node_put(fn); 1437 1387 } 1438 1388 … … 1460 1410 1461 1411 rc = ext4_filesystem_truncate_inode(inode_ref, new_size); 1462 int const rc2 =ext4fs_node_put(fn);1463 1464 return rc == EOK ? rc2 : rc;1412 ext4fs_node_put(fn); 1413 1414 return rc; 1465 1415 } 1466 1416
Note:
See TracChangeset
for help on using the changeset viewer.