Changes in uspace/srv/fs/fat/fat_ops.c [44ecf89:2463df9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/fat/fat_ops.c
r44ecf89 r2463df9 55 55 #include <assert.h> 56 56 #include <fibril_synch.h> 57 #include <sys/mman.h>58 57 #include <align.h> 59 58 #include <malloc.h> … … 91 90 static bool fat_is_file(fs_node_t *node); 92 91 static service_id_t fat_service_get(fs_node_t *node); 92 static int fat_size_block(service_id_t, uint32_t *); 93 static int fat_total_block_count(service_id_t, uint64_t *); 94 static int fat_free_block_count(service_id_t, uint64_t *); 93 95 94 96 /* … … 149 151 static int fat_node_fini_by_service_id(service_id_t service_id) 150 152 { 151 fat_node_t *nodep;152 153 int rc; 153 154 … … 160 161 restart: 161 162 fibril_mutex_lock(&ffn_mutex); 162 list_foreach(ffn_list, lnk) { 163 nodep = list_get_instance(lnk, fat_node_t, ffn_link); 163 list_foreach(ffn_list, ffn_link, fat_node_t, nodep) { 164 164 if (!fibril_mutex_trylock(&nodep->lock)) { 165 165 fibril_mutex_unlock(&ffn_mutex); … … 843 843 } 844 844 845 int fat_size_block(service_id_t service_id, uint32_t *size) 846 { 847 fat_bs_t *bs; 848 849 bs = block_bb_get(service_id); 850 *size = BPC(bs); 851 852 return EOK; 853 } 854 855 int fat_total_block_count(service_id_t service_id, uint64_t *count) 856 { 857 fat_bs_t *bs; 858 859 bs = block_bb_get(service_id); 860 *count = (SPC(bs)) ? TS(bs) / SPC(bs) : 0; 861 862 return EOK; 863 } 864 865 int fat_free_block_count(service_id_t service_id, uint64_t *count) 866 { 867 fat_bs_t *bs; 868 fat_cluster_t e0; 869 uint64_t block_count; 870 int rc; 871 uint32_t cluster_no, clusters; 872 873 block_count = 0; 874 bs = block_bb_get(service_id); 875 clusters = (SPC(bs)) ? TS(bs) / SPC(bs) : 0; 876 for (cluster_no = 0; cluster_no < clusters; cluster_no++) { 877 rc = fat_get_cluster(bs, service_id, FAT1, cluster_no, &e0); 878 if (rc != EOK) 879 return EIO; 880 881 if (e0 == FAT_CLST_RES0) 882 block_count++; 883 } 884 *count = block_count; 885 886 return EOK; 887 } 888 845 889 /** libfs operations */ 846 890 libfs_ops_t fat_libfs_ops = { … … 860 904 .is_directory = fat_is_directory, 861 905 .is_file = fat_is_file, 862 .service_get = fat_service_get 906 .service_get = fat_service_get, 907 .size_block = fat_size_block, 908 .total_block_count = fat_total_block_count, 909 .free_block_count = fat_free_block_count 863 910 }; 864 911
Note:
See TracChangeset
for help on using the changeset viewer.