Lines Matching defs:exfat

33 	struct exfat *exfat = iter->exfat;
38 device_offset = exfat_c2o(exfat, desc->p_clus) + desc->offset;
42 if (exfat_write(exfat->blk_dev->dev_fd,
57 struct exfat *exfat = iter->exfat;
61 clus_count = iter->parent->size / exfat->clus_size;
66 size = exfat->clus_size;
72 return posix_fadvise(exfat->blk_dev->dev_fd,
73 exfat_c2o(exfat, iter->parent->first_clus), size,
88 struct exfat *exfat = iter->exfat;
94 clus_count = iter->parent->size / exfat->clus_size;
99 ret = exfat_get_inode_next_clus(exfat, iter->parent,
107 device_offset = exfat_c2o(exfat, ra_p_clus);
109 exfat->clus_size : iter->ra_partial_size;
110 ret = posix_fadvise(exfat->blk_dev->dev_fd,
119 exfat->clus_size) {
120 device_offset = exfat_c2o(exfat, p_clus) +
122 ret = posix_fadvise(exfat->blk_dev->dev_fd,
139 struct exfat *exfat = iter->exfat;
144 if (list_empty(&exfat->dir_list))
147 current = exfat->dir_list.next;
149 current->next != &exfat->dir_list) {
152 offset = exfat_c2o(exfat, next_inode->first_clus);
153 return posix_fadvise(exfat->blk_dev->dev_fd, offset,
166 struct exfat *exfat = iter->exfat;
187 exfat->clus_size) {
191 ret = exfat_get_inode_next_clus(exfat, iter->parent,
201 device_offset = exfat_c2o(exfat, desc->p_clus) + desc->offset;
202 ret = exfat_read(exfat->blk_dev->dev_fd, desc->buffer,
213 (block * iter->read_size) / exfat->clus_size,
214 (block * iter->read_size) % exfat->clus_size,
221 int exfat_de_iter_init(struct exfat_de_iter *iter, struct exfat *exfat,
224 iter->exfat = exfat;
226 iter->write_size = exfat->sect_size;
227 iter->read_size = exfat->clus_size <= 4*KB ? exfat->clus_size : 4*KB;
228 if (exfat->clus_size <= 32 * KB)
229 iter->ra_partial_size = MAX(4 * KB, exfat->clus_size / 2);
231 iter->ra_partial_size = exfat->clus_size / 4;
336 return exfat_c2o(iter->exfat, bd->p_clus) + bd->offset +
351 int exfat_lookup_dentry_set(struct exfat *exfat, struct exfat_inode *parent,
362 bd = exfat_alloc_buffer(2, exfat->clus_size, exfat->sect_size);
366 retval = exfat_de_iter_init(&de_iter, exfat, parent, bd);
487 int exfat_lookup_file(struct exfat *exfat, struct exfat_inode *parent,
501 retval = exfat_lookup_dentry_set(exfat, parent, filter_out);
539 uint16_t exfat_calc_name_hash(struct exfat *exfat,
547 ch = exfat->upcase_table[le16_to_cpu(name[i])];
573 int exfat_build_file_dentry_set(struct exfat *exfat, const char *name,
620 cpu_to_le16(exfat_calc_name_hash(exfat, utf16_name, name_len));
637 int exfat_update_file_dentry_set(struct exfat *exfat,
660 exfat_calc_name_hash(exfat, utf16_name, name_len);
670 dset[1].dentry.stream.valid_size = cpu_to_le64(ccount * exfat->clus_size);
671 dset[1].dentry.stream.size = cpu_to_le64(ccount * exfat->clus_size);
680 static int find_free_cluster(struct exfat *exfat,
683 clus_t end = le32_to_cpu(exfat->bs->bsx.clu_count) +
686 if (!exfat_heap_clus(exfat, start))
690 if (exfat_bitmap_find_zero(exfat, exfat->alloc_bitmap,
693 if (!exfat_bitmap_get(exfat->disk_bitmap, *new_clu))
701 if (exfat_bitmap_find_zero(exfat, exfat->alloc_bitmap,
704 if (!exfat_bitmap_get(exfat->disk_bitmap, *new_clu))
714 static int exfat_map_cluster(struct exfat *exfat, struct exfat_inode *inode,
719 if (!exfat_heap_clus(exfat, inode->first_clus))
726 last_count = DIV_ROUND_UP(inode->size, exfat->clus_size);
728 last_count = file_off / exfat->clus_size + 1;
731 if (count * exfat->clus_size > inode->size)
739 if (exfat_get_inode_next_clus(exfat, inode, clu, &next))
742 if (!exfat_heap_clus(exfat, clu))
751 static int exfat_write_dentry_set(struct exfat *exfat,
759 if (exfat_o2c(exfat, dev_off, &clus, &clus_off))
763 first_half_len = MIN(dent_len, exfat->clus_size - clus_off);
770 if (exfat_get_next_clus(exfat, clus, &next_clus))
772 if (!exfat_heap_clus(exfat, next_clus))
774 sec_half_off = exfat_c2o(exfat, next_clus);
777 if (exfat_write(exfat->blk_dev->dev_fd, dset, first_half_len,
783 if (exfat_write(exfat->blk_dev->dev_fd, dset, sec_half_len,
797 static int exfat_alloc_cluster(struct exfat *exfat, struct exfat_inode *inode,
802 bool need_dset = inode != exfat->root;
807 err = find_free_cluster(exfat, exfat->start_clu, new_clu);
809 exfat->start_clu = EXFAT_FIRST_CLUSTER;
813 exfat->start_clu = *new_clu;
815 if (exfat_set_fat(exfat, *new_clu, EXFAT_EOF_CLUSTER))
819 if (exfat_write(exfat->blk_dev->dev_fd, exfat->zero_cluster,
820 exfat->clus_size, exfat_c2o(exfat, *new_clu)) !=
821 (ssize_t)exfat->clus_size) {
827 err = exfat_map_cluster(exfat, inode, EOF, &last_clu);
833 if (exfat_set_fat(exfat, last_clu, *new_clu))
837 err = exfat_update_file_dentry_set(exfat,
842 exfat->clus_size) + 1);
848 err = exfat_update_file_dentry_set(exfat,
857 if (need_dset && exfat_write_dentry_set(exfat, inode->dentry_set,
862 exfat_bitmap_set(exfat->alloc_bitmap, *new_clu);
865 inode->size += exfat->clus_size;
869 int exfat_add_dentry_set(struct exfat *exfat, struct exfat_dentry_loc *loc,
878 (unsigned int)dcount * DENTRY_SIZE > exfat->clus_size)
885 if (exfat_alloc_cluster(exfat, parent, &new_clus))
887 if ((uint64_t)loc->file_offset == parent->size - exfat->clus_size)
888 dev_off = exfat_c2o(exfat, new_clus);
891 if (exfat_write_dentry_set(exfat, dset, dcount, dev_off, &next_dev_off))
901 int exfat_create_file(struct exfat *exfat, struct exfat_inode *parent,
909 err = exfat_lookup_file(exfat, parent, name, &filter);
918 err = exfat_build_file_dentry_set(exfat, name, attr,
926 err = exfat_add_dentry_set(exfat, &loc, dset, dcount, false);