Lines Matching refs:exfat

72 	fprintf(stderr, "\t-b | --ignore-bad-fs Try to recover even if exfat is not found\n");
108 struct exfat *exfat = de_iter->exfat;
116 max_count = DIV_ROUND_UP(node->size, exfat->clus_size);
123 (node->size > 0 && !exfat_heap_clus(exfat, node->first_clus))) {
141 count * exfat->clus_size))
151 if (exfat_bitmap_get(exfat->alloc_bitmap, clus)) {
156 count * exfat->clus_size))
162 if (!exfat_bitmap_get(exfat->disk_bitmap, clus)) {
171 if (exfat_get_inode_next_clus(exfat, node, clus, &next))
178 count * exfat->clus_size))
184 !exfat_heap_clus(exfat, next)) {
189 (count + 1) * exfat->clus_size)) {
192 exfat_bitmap_set(exfat->alloc_bitmap,
202 exfat_bitmap_set(exfat->alloc_bitmap, clus);
211 count * exfat->clus_size))
219 node->size = count * exfat->clus_size;
220 if (!exfat_heap_clus(exfat, prev))
224 if (count * exfat->clus_size <
227 count * exfat->clus_size);
228 if (!exfat_heap_clus(exfat, prev))
231 count * exfat->clus_size);
236 if (!node->is_contiguous && exfat_heap_clus(exfat, prev)) {
237 if (exfat_set_fat(exfat, prev, EXFAT_EOF_CLUSTER))
243 static int root_check_clus_chain(struct exfat *exfat,
249 if (!exfat_heap_clus(exfat, node->first_clus))
256 if (exfat_bitmap_get(exfat->alloc_bitmap, clus)) {
264 exfat_bitmap_set(exfat->alloc_bitmap, clus);
266 if (exfat_get_inode_next_clus(exfat, node, clus, &next)) {
271 if (next != EXFAT_EOF_CLUSTER && !exfat_heap_clus(exfat, next)) {
291 if (!exfat_heap_clus(exfat, prev)) {
295 node->size = *clus_count * exfat->clus_size;
296 return exfat_set_fat(exfat, prev, EXFAT_EOF_CLUSTER);
344 static int exfat_mark_volume_dirty(struct exfat *exfat, bool dirty)
348 flags = le16_to_cpu(exfat->bs->bsx.vol_flags);
354 exfat->bs->bsx.vol_flags = cpu_to_le16(flags);
355 if (exfat_write(exfat->blk_dev->dev_fd, exfat->bs,
361 if (fsync(exfat->blk_dev->dev_fd) != 0) {
391 exfat_err("failed to find exfat file system\n");
416 exfat_err("unsupported exfat version: %d.%d\n",
502 /* First, find out the exfat sector size */
516 exfat_err("Bad fs_name in boot sector, which does not describe a valid exfat filesystem\n");
591 struct exfat *exfat = iter->exfat;
601 if (node->size > le32_to_cpu(exfat->bs->bsx.clu_count) *
602 (uint64_t)exfat->clus_size) {
620 node->size % exfat->clus_size != 0) {
623 node->size, exfat->clus_size);
658 hash = exfat_calc_name_hash(iter->exfat, inode->name, (int)name_len);
704 err = exfat_lookup_file(iter->exfat, iter->parent, rename, &filter);
731 err = exfat_lookup_file(iter->exfat, iter->parent, rename,
803 hash = exfat_calc_name_hash(iter->exfat, utf16_name, ret);
961 static int read_bitmap(struct exfat *exfat)
971 retval = exfat_lookup_dentry_set(exfat, exfat->root, &filter);
981 DIV_ROUND_UP(exfat->clus_count, 8)) {
986 if (!exfat_heap_clus(exfat, le32_to_cpu(dentry->bitmap_start_clu))) {
992 exfat->disk_bitmap_clus = le32_to_cpu(dentry->bitmap_start_clu);
993 exfat->disk_bitmap_size = DIV_ROUND_UP(exfat->clus_count, 8);
995 exfat_bitmap_set_range(exfat, exfat->alloc_bitmap,
997 DIV_ROUND_UP(exfat->disk_bitmap_size,
998 exfat->clus_size));
1001 if (exfat_read(exfat->blk_dev->dev_fd, exfat->disk_bitmap,
1002 exfat->disk_bitmap_size,
1003 exfat_c2o(exfat, exfat->disk_bitmap_clus)) !=
1004 (ssize_t)exfat->disk_bitmap_size)
1035 static int read_upcase_table(struct exfat *exfat)
1048 retval = exfat_lookup_dentry_set(exfat, exfat->root, &filter);
1054 if (!exfat_heap_clus(exfat, le32_to_cpu(dentry->upcase_start_clu))) {
1077 if (exfat_read(exfat->blk_dev->dev_fd, upcase, size,
1078 exfat_c2o(exfat,
1094 exfat_bitmap_set_range(exfat, exfat->alloc_bitmap,
1097 exfat->clus_size));
1099 exfat->upcase_table = calloc(1,
1101 if (!exfat->upcase_table) {
1107 exfat->upcase_table, EXFAT_UPCASE_TABLE_CHARS);
1118 struct exfat *exfat = fsck->exfat;
1126 ret = exfat_de_iter_init(de_iter, exfat, dir, fsck->buffer_desc);
1161 &exfat->dir_list);
1172 if (dir == exfat->root)
1207 struct exfat *exfat = fsck->exfat;
1212 dev_offset = exfat_c2o(exfat, exfat->disk_bitmap_clus);
1213 bitmap_bytes = EXFAT_BITMAP_SIZE(le32_to_cpu(exfat->bs->bsx.clu_count));
1215 disk_b = (bitmap_t *)exfat->disk_bitmap;
1216 alloc_b = (bitmap_t *)exfat->alloc_bitmap;
1217 ohead_b = (bitmap_t *)exfat->ohead_bitmap;
1232 if (exfat_write(exfat->blk_dev->dev_fd,
1252 struct exfat *exfat = fsck->exfat;
1256 if (!exfat->root) {
1261 list_add(&exfat->root->list, &exfat->dir_list);
1263 while (!list_empty(&exfat->dir_list)) {
1264 dir = list_entry(exfat->dir_list.next,
1288 exfat_free_dir_list(exfat);
1292 static int exfat_root_dir_check(struct exfat *exfat)
1302 exfat->root = root;
1303 root->first_clus = le32_to_cpu(exfat->bs->bsx.root_cluster);
1304 if (root_check_clus_chain(exfat, root, &clus_count)) {
1307 exfat->root = NULL;
1310 root->size = clus_count * exfat->clus_size;
1316 err = exfat_read_volume_label(exfat);
1321 err = read_bitmap(exfat);
1327 err = read_upcase_table(exfat);
1334 err = exfat_build_file_dentry_set(exfat, " ", ATTR_SUBDIR,
1343 static int read_lostfound(struct exfat *exfat, struct exfat_inode **lostfound)
1349 err = exfat_lookup_file(exfat, exfat->root, "LOST+FOUND", &filter);
1377 struct exfat *exfat = fsck->exfat;
1391 err = read_lostfound(exfat, &lostfound);
1398 err = exfat_lookup_dentry_set(exfat, lostfound, &lf);
1409 err = exfat_build_file_dentry_set(exfat, name, 0, &dset, &dcount);
1416 clu_count = le32_to_cpu(exfat->bs->bsx.clu_count);
1421 disk_b = (bitmap_t *)exfat->disk_bitmap;
1422 alloc_b = (bitmap_t *)exfat->alloc_bitmap;
1423 ohead_b = (bitmap_t *)exfat->ohead_bitmap;
1431 exfat_bitmap_find_one(exfat, exfat->ohead_bitmap, clu, &s_clu) == 0;) {
1432 if (exfat_bitmap_find_zero(exfat, exfat->ohead_bitmap, s_clu, &e_clu))
1438 err = exfat_update_file_dentry_set(exfat, dset, dcount,
1442 err = exfat_add_dentry_set(exfat, &loc, dset, dcount, true);
1479 struct exfat *exfat = fsck->exfat;
1483 bytes_to_human_readable(1 << exfat->bs->bsx.sect_size_bits));
1485 bytes_to_human_readable(exfat->clus_size));
1487 bytes_to_human_readable(exfat->blk_dev->size));
1591 exfat_fsck.exfat = exfat_alloc_exfat(&bd, bs);
1592 if (!exfat_fsck.exfat) {
1598 exfat_fsck.exfat->clus_size,
1599 exfat_fsck.exfat->sect_size);
1606 exfat_mark_volume_dirty(exfat_fsck.exfat, true)) {
1612 ret = exfat_root_dir_check(exfat_fsck.exfat);
1619 ret = exfat_create_file(exfat_fsck.exfat,
1620 exfat_fsck.exfat->root,
1628 if (fsync(exfat_fsck.exfat->blk_dev->dev_fd) != 0) {
1660 exfat_mark_volume_dirty(exfat_fsck.exfat, false);
1677 if (exfat_fsck.exfat)
1678 exfat_free_exfat(exfat_fsck.exfat);