Lines Matching refs:node

74 		const struct exfat_node* node, cluster_t cluster)  in exfat_next_cluster()  argument
82 if (node->is_contiguous) in exfat_next_cluster()
93 struct exfat_node* node, uint32_t count) in exfat_advance_cluster() argument
97 if (node->fptr_index > count) in exfat_advance_cluster()
99 node->fptr_index = 0; in exfat_advance_cluster()
100 node->fptr_cluster = node->start_cluster; in exfat_advance_cluster()
103 for (i = node->fptr_index; i < count; i++) in exfat_advance_cluster()
105 node->fptr_cluster = exfat_next_cluster(ef, node, node->fptr_cluster); in exfat_advance_cluster()
106 if (CLUSTER_INVALID(*ef->sb, node->fptr_cluster)) in exfat_advance_cluster()
110 node->fptr_index = count; in exfat_advance_cluster()
111 return node->fptr_cluster; in exfat_advance_cluster()
139 static int flush_nodes(struct exfat* ef, struct exfat_node* node) in flush_nodes() argument
143 for (p = node->child; p != NULL; p = p->next) in flush_nodes()
149 return exfat_flush_node(ef, node); in flush_nodes()
236 static int shrink_file(struct exfat* ef, struct exfat_node* node,
239 static int grow_file(struct exfat* ef, struct exfat_node* node, in grow_file() argument
249 if (node->start_cluster != EXFAT_CLUSTER_FREE) in grow_file()
252 previous = exfat_advance_cluster(ef, node, current - 1); in grow_file()
261 if (node->fptr_index != 0) in grow_file()
262 exfat_bug("non-zero pointer index (%u)", node->fptr_index); in grow_file()
268 node->fptr_cluster = node->start_cluster = previous; in grow_file()
271 node->is_contiguous = true; in grow_file()
280 shrink_file(ef, node, current + allocated, allocated); in grow_file()
283 if (next != previous + 1 && node->is_contiguous) in grow_file()
287 if (!make_noncontiguous(ef, node->start_cluster, previous)) in grow_file()
289 node->is_contiguous = false; in grow_file()
290 node->is_dirty = true; in grow_file()
292 if (!set_next_cluster(ef, node->is_contiguous, previous, next)) in grow_file()
298 if (!set_next_cluster(ef, node->is_contiguous, previous, in grow_file()
304 static int shrink_file(struct exfat* ef, struct exfat_node* node, in shrink_file() argument
312 if (node->start_cluster == EXFAT_CLUSTER_FREE) in shrink_file()
320 cluster_t last = exfat_advance_cluster(ef, node, in shrink_file()
327 previous = exfat_next_cluster(ef, node, last); in shrink_file()
328 if (!set_next_cluster(ef, node->is_contiguous, last, in shrink_file()
334 previous = node->start_cluster; in shrink_file()
335 node->start_cluster = EXFAT_CLUSTER_FREE; in shrink_file()
336 node->is_dirty = true; in shrink_file()
338 node->fptr_index = 0; in shrink_file()
339 node->fptr_cluster = node->start_cluster; in shrink_file()
351 next = exfat_next_cluster(ef, node, previous); in shrink_file()
352 if (!set_next_cluster(ef, node->is_contiguous, previous, in shrink_file()
371 static int erase_range(struct exfat* ef, struct exfat_node* node, in erase_range() argument
381 cluster = exfat_advance_cluster(ef, node, in erase_range()
395 cluster = exfat_next_cluster(ef, node, cluster); in erase_range()
406 int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size, in exfat_truncate() argument
409 uint32_t c1 = bytes2clusters(ef, node->size); in exfat_truncate()
413 if (node->references == 0 && node->parent) in exfat_truncate()
416 if (node->size == size) in exfat_truncate()
420 rc = grow_file(ef, node, c1, c2 - c1); in exfat_truncate()
422 rc = shrink_file(ef, node, c1, c1 - c2); in exfat_truncate()
429 rc = erase_range(ef, node, node->valid_size, size); in exfat_truncate()
432 node->valid_size = size; in exfat_truncate()
436 node->valid_size = MIN(node->valid_size, size); in exfat_truncate()
439 exfat_update_mtime(node); in exfat_truncate()
440 node->size = size; in exfat_truncate()
441 node->is_dirty = true; in exfat_truncate()