Changeset 8b655705 in mainline for uspace/srv/fs/fat/fat_ops.c
- Timestamp:
- 2011-04-15T19:38:07Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9dd730d1
- Parents:
- 6b9e85b (diff), b2fb47f (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/fat/fat_ops.c
r6b9e85b r8b655705 42 42 #include <libfs.h> 43 43 #include <libblock.h> 44 #include <ipc/ipc.h>45 44 #include <ipc/services.h> 46 45 #include <ipc/devmap.h> … … 326 325 uint16_t_le2host(d->firstc)); 327 326 if (rc != EOK) { 327 (void) block_put(b); 328 328 (void) fat_node_put(FS_NODE(nodep)); 329 329 return rc; … … 722 722 (str_cmp((char *) d->name, FAT_NAME_DOT)) == 0) { 723 723 memset(d, 0, sizeof(fat_dentry_t)); 724 str_cpy((char *) d->name, 8, FAT_NAME_DOT);725 str_cpy((char *) d->ext, 3, FAT_EXT_PAD);724 memcpy(d->name, FAT_NAME_DOT, FAT_NAME_LEN); 725 memcpy(d->ext, FAT_EXT_PAD, FAT_EXT_LEN); 726 726 d->attr = FAT_ATTR_SUBDIR; 727 727 d->firstc = host2uint16_t_le(childp->firstc); … … 732 732 (str_cmp((char *) d->name, FAT_NAME_DOT_DOT) == 0)) { 733 733 memset(d, 0, sizeof(fat_dentry_t)); 734 str_cpy((char *) d->name, 8, FAT_NAME_DOT_DOT);735 str_cpy((char *) d->ext, 3, FAT_EXT_PAD);734 memcpy(d->name, FAT_NAME_DOT_DOT, FAT_NAME_LEN); 735 memcpy(d->ext, FAT_EXT_PAD, FAT_EXT_LEN); 736 736 d->attr = FAT_ATTR_SUBDIR; 737 737 d->firstc = (parentp->firstc == FAT_CLST_ROOT) ? … … 812 812 fibril_mutex_unlock(&childp->idx->lock); 813 813 childp->lnkcnt = 0; 814 childp->refcnt++; /* keep the node in memory until destroyed */ 814 815 childp->dirty = true; 815 816 fibril_mutex_unlock(&childp->lock); … … 955 956 956 957 if (rc != EOK) { 957 ipc_answer_0(rid, rc);958 async_answer_0(rid, rc); 958 959 return; 959 960 } … … 970 971 rc = block_init(devmap_handle, BS_SIZE); 971 972 if (rc != EOK) { 972 ipc_answer_0(rid, rc);973 async_answer_0(rid, rc); 973 974 return; 974 975 } … … 978 979 if (rc != EOK) { 979 980 block_fini(devmap_handle); 980 ipc_answer_0(rid, rc);981 async_answer_0(rid, rc); 981 982 return; 982 983 } … … 987 988 if (BPS(bs) != BS_SIZE) { 988 989 block_fini(devmap_handle); 989 ipc_answer_0(rid, ENOTSUP);990 async_answer_0(rid, ENOTSUP); 990 991 return; 991 992 } … … 995 996 if (rc != EOK) { 996 997 block_fini(devmap_handle); 997 ipc_answer_0(rid, rc);998 async_answer_0(rid, rc); 998 999 return; 999 1000 } … … 1004 1005 (void) block_cache_fini(devmap_handle); 1005 1006 block_fini(devmap_handle); 1006 ipc_answer_0(rid, rc);1007 async_answer_0(rid, rc); 1007 1008 return; 1008 1009 } … … 1012 1013 (void) block_cache_fini(devmap_handle); 1013 1014 block_fini(devmap_handle); 1014 ipc_answer_0(rid, rc);1015 async_answer_0(rid, rc); 1015 1016 return; 1016 1017 } … … 1022 1023 block_fini(devmap_handle); 1023 1024 fat_idx_fini_by_devmap_handle(devmap_handle); 1024 ipc_answer_0(rid, ENOMEM);1025 async_answer_0(rid, ENOMEM); 1025 1026 return; 1026 1027 } … … 1032 1033 block_fini(devmap_handle); 1033 1034 fat_idx_fini_by_devmap_handle(devmap_handle); 1034 ipc_answer_0(rid, ENOMEM);1035 async_answer_0(rid, ENOMEM); 1035 1036 return; 1036 1037 } … … 1044 1045 block_fini(devmap_handle); 1045 1046 fat_idx_fini_by_devmap_handle(devmap_handle); 1046 ipc_answer_0(rid, ENOMEM);1047 async_answer_0(rid, ENOMEM); 1047 1048 return; 1048 1049 } … … 1062 1063 fibril_mutex_unlock(&ridxp->lock); 1063 1064 1064 ipc_answer_3(rid, EOK, ridxp->index, rootp->size, rootp->lnkcnt);1065 async_answer_3(rid, EOK, ridxp->index, rootp->size, rootp->lnkcnt); 1065 1066 } 1066 1067 … … 1079 1080 rc = fat_root_get(&fn, devmap_handle); 1080 1081 if (rc != EOK) { 1081 ipc_answer_0(rid, rc);1082 async_answer_0(rid, rc); 1082 1083 return; 1083 1084 } … … 1090 1091 if (nodep->refcnt != 2) { 1091 1092 (void) fat_node_put(fn); 1092 ipc_answer_0(rid, EBUSY);1093 async_answer_0(rid, EBUSY); 1093 1094 return; 1094 1095 } … … 1110 1111 block_fini(devmap_handle); 1111 1112 1112 ipc_answer_0(rid, EOK);1113 async_answer_0(rid, EOK); 1113 1114 } 1114 1115 … … 1138 1139 rc = fat_node_get(&fn, devmap_handle, index); 1139 1140 if (rc != EOK) { 1140 ipc_answer_0(rid, rc);1141 async_answer_0(rid, rc); 1141 1142 return; 1142 1143 } 1143 1144 if (!fn) { 1144 ipc_answer_0(rid, ENOENT);1145 async_answer_0(rid, ENOENT); 1145 1146 return; 1146 1147 } … … 1151 1152 if (!async_data_read_receive(&callid, &len)) { 1152 1153 fat_node_put(fn); 1153 ipc_answer_0(callid, EINVAL);1154 ipc_answer_0(rid, EINVAL);1154 async_answer_0(callid, EINVAL); 1155 async_answer_0(rid, EINVAL); 1155 1156 return; 1156 1157 } … … 1175 1176 if (rc != EOK) { 1176 1177 fat_node_put(fn); 1177 ipc_answer_0(callid, rc);1178 ipc_answer_0(rid, rc);1178 async_answer_0(callid, rc); 1179 async_answer_0(rid, rc); 1179 1180 return; 1180 1181 } … … 1184 1185 if (rc != EOK) { 1185 1186 fat_node_put(fn); 1186 ipc_answer_0(rid, rc);1187 async_answer_0(rid, rc); 1187 1188 return; 1188 1189 } … … 1241 1242 miss: 1242 1243 rc = fat_node_put(fn); 1243 ipc_answer_0(callid, rc != EOK ? rc : ENOENT);1244 ipc_answer_1(rid, rc != EOK ? rc : ENOENT, 0);1244 async_answer_0(callid, rc != EOK ? rc : ENOENT); 1245 async_answer_1(rid, rc != EOK ? rc : ENOENT, 0); 1245 1246 return; 1246 1247 1247 1248 err: 1248 1249 (void) fat_node_put(fn); 1249 ipc_answer_0(callid, rc);1250 ipc_answer_0(rid, rc);1250 async_answer_0(callid, rc); 1251 async_answer_0(rid, rc); 1251 1252 return; 1252 1253 … … 1257 1258 1258 1259 rc = fat_node_put(fn); 1259 ipc_answer_1(rid, rc, (sysarg_t)bytes);1260 async_answer_1(rid, rc, (sysarg_t)bytes); 1260 1261 } 1261 1262 … … 1277 1278 rc = fat_node_get(&fn, devmap_handle, index); 1278 1279 if (rc != EOK) { 1279 ipc_answer_0(rid, rc);1280 async_answer_0(rid, rc); 1280 1281 return; 1281 1282 } 1282 1283 if (!fn) { 1283 ipc_answer_0(rid, ENOENT);1284 async_answer_0(rid, ENOENT); 1284 1285 return; 1285 1286 } … … 1290 1291 if (!async_data_write_receive(&callid, &len)) { 1291 1292 (void) fat_node_put(fn); 1292 ipc_answer_0(callid, EINVAL);1293 ipc_answer_0(rid, EINVAL);1293 async_answer_0(callid, EINVAL); 1294 async_answer_0(rid, EINVAL); 1294 1295 return; 1295 1296 } … … 1319 1320 if (rc != EOK) { 1320 1321 (void) fat_node_put(fn); 1321 ipc_answer_0(callid, rc);1322 ipc_answer_0(rid, rc);1322 async_answer_0(callid, rc); 1323 async_answer_0(rid, rc); 1323 1324 return; 1324 1325 } … … 1326 1327 if (rc != EOK) { 1327 1328 (void) fat_node_put(fn); 1328 ipc_answer_0(callid, rc);1329 ipc_answer_0(rid, rc);1329 async_answer_0(callid, rc); 1330 async_answer_0(rid, rc); 1330 1331 return; 1331 1332 } … … 1336 1337 if (rc != EOK) { 1337 1338 (void) fat_node_put(fn); 1338 ipc_answer_0(rid, rc);1339 async_answer_0(rid, rc); 1339 1340 return; 1340 1341 } … … 1345 1346 size = nodep->size; 1346 1347 rc = fat_node_put(fn); 1347 ipc_answer_2(rid, rc, bytes, nodep->size);1348 async_answer_2(rid, rc, bytes, nodep->size); 1348 1349 return; 1349 1350 } else { … … 1361 1362 /* could not allocate a chain of nclsts clusters */ 1362 1363 (void) fat_node_put(fn); 1363 ipc_answer_0(callid, rc);1364 ipc_answer_0(rid, rc);1364 async_answer_0(callid, rc); 1365 async_answer_0(rid, rc); 1365 1366 return; 1366 1367 } … … 1370 1371 (void) fat_free_clusters(bs, devmap_handle, mcl); 1371 1372 (void) fat_node_put(fn); 1372 ipc_answer_0(callid, rc);1373 ipc_answer_0(rid, rc);1373 async_answer_0(callid, rc); 1374 async_answer_0(rid, rc); 1374 1375 return; 1375 1376 } … … 1379 1380 (void) fat_free_clusters(bs, devmap_handle, mcl); 1380 1381 (void) fat_node_put(fn); 1381 ipc_answer_0(callid, rc);1382 ipc_answer_0(rid, rc);1382 async_answer_0(callid, rc); 1383 async_answer_0(rid, rc); 1383 1384 return; 1384 1385 } … … 1390 1391 (void) fat_free_clusters(bs, devmap_handle, mcl); 1391 1392 (void) fat_node_put(fn); 1392 ipc_answer_0(rid, rc);1393 async_answer_0(rid, rc); 1393 1394 return; 1394 1395 } … … 1401 1402 (void) fat_free_clusters(bs, devmap_handle, mcl); 1402 1403 (void) fat_node_put(fn); 1403 ipc_answer_0(rid, rc);1404 async_answer_0(rid, rc); 1404 1405 return; 1405 1406 } … … 1407 1408 nodep->dirty = true; /* need to sync node */ 1408 1409 rc = fat_node_put(fn); 1409 ipc_answer_2(rid, rc, bytes, size);1410 async_answer_2(rid, rc, bytes, size); 1410 1411 return; 1411 1412 } … … 1425 1426 rc = fat_node_get(&fn, devmap_handle, index); 1426 1427 if (rc != EOK) { 1427 ipc_answer_0(rid, rc);1428 async_answer_0(rid, rc); 1428 1429 return; 1429 1430 } 1430 1431 if (!fn) { 1431 ipc_answer_0(rid, ENOENT);1432 async_answer_0(rid, ENOENT); 1432 1433 return; 1433 1434 } … … 1475 1476 out: 1476 1477 fat_node_put(fn); 1477 ipc_answer_0(rid, rc);1478 async_answer_0(rid, rc); 1478 1479 return; 1479 1480 } … … 1481 1482 void fat_close(ipc_callid_t rid, ipc_call_t *request) 1482 1483 { 1483 ipc_answer_0(rid, EOK);1484 async_answer_0(rid, EOK); 1484 1485 } 1485 1486 … … 1489 1490 fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); 1490 1491 fs_node_t *fn; 1492 fat_node_t *nodep; 1491 1493 int rc; 1492 1494 1493 1495 rc = fat_node_get(&fn, devmap_handle, index); 1494 1496 if (rc != EOK) { 1495 ipc_answer_0(rid, rc);1497 async_answer_0(rid, rc); 1496 1498 return; 1497 1499 } 1498 1500 if (!fn) { 1499 ipc_answer_0(rid, ENOENT); 1500 return; 1501 } 1501 async_answer_0(rid, ENOENT); 1502 return; 1503 } 1504 1505 nodep = FAT_NODE(fn); 1506 /* 1507 * We should have exactly two references. One for the above 1508 * call to fat_node_get() and one from fat_unlink(). 1509 */ 1510 assert(nodep->refcnt == 2); 1502 1511 1503 1512 rc = fat_destroy_node(fn); 1504 ipc_answer_0(rid, rc);1513 async_answer_0(rid, rc); 1505 1514 } 1506 1515 … … 1523 1532 int rc = fat_node_get(&fn, devmap_handle, index); 1524 1533 if (rc != EOK) { 1525 ipc_answer_0(rid, rc);1534 async_answer_0(rid, rc); 1526 1535 return; 1527 1536 } 1528 1537 if (!fn) { 1529 ipc_answer_0(rid, ENOENT);1538 async_answer_0(rid, ENOENT); 1530 1539 return; 1531 1540 } … … 1537 1546 1538 1547 fat_node_put(fn); 1539 ipc_answer_0(rid, rc);1548 async_answer_0(rid, rc); 1540 1549 } 1541 1550
Note:
See TracChangeset
for help on using the changeset viewer.