mirror of
https://github.com/relan/exfat.git
synced 2026-01-12 00:18:54 +08:00
Move nodes flush from exfat_flush() into a separate function.
Make exfat_flush() execution time more predictable.
This commit is contained in:
@@ -206,6 +206,9 @@ static int fuse_exfat_fsync(const char* path, int datasync,
|
||||
int rc;
|
||||
|
||||
exfat_debug("[%s] %s", __func__, path);
|
||||
rc = exfat_flush_nodes(&ef);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
rc = exfat_flush(&ef);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
@@ -149,10 +149,13 @@ static int flush_nodes(struct exfat* ef, struct exfat_node* node)
|
||||
return exfat_flush_node(ef, node);
|
||||
}
|
||||
|
||||
int exfat_flush_nodes(struct exfat* ef)
|
||||
{
|
||||
return flush_nodes(ef, ef->root);
|
||||
}
|
||||
|
||||
int exfat_flush(struct exfat* ef)
|
||||
{
|
||||
int rc = flush_nodes(ef, ef->root);
|
||||
|
||||
if (ef->cmap.dirty)
|
||||
{
|
||||
if (exfat_pwrite(ef->dev, ef->cmap.chunk,
|
||||
@@ -165,7 +168,7 @@ int exfat_flush(struct exfat* ef)
|
||||
ef->cmap.dirty = false;
|
||||
}
|
||||
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool set_next_cluster(const struct exfat* ef, bool contiguous,
|
||||
|
||||
@@ -169,6 +169,7 @@ cluster_t exfat_next_cluster(const struct exfat* ef,
|
||||
const struct exfat_node* node, cluster_t cluster);
|
||||
cluster_t exfat_advance_cluster(const struct exfat* ef,
|
||||
struct exfat_node* node, uint32_t count);
|
||||
int exfat_flush_nodes(struct exfat* ef);
|
||||
int exfat_flush(struct exfat* ef);
|
||||
int exfat_truncate(struct exfat* ef, struct exfat_node* node, uint64_t size,
|
||||
bool erase);
|
||||
|
||||
@@ -359,7 +359,8 @@ static void finalize_super_block(struct exfat* ef)
|
||||
|
||||
void exfat_unmount(struct exfat* ef)
|
||||
{
|
||||
exfat_flush(ef); /* ignore return code */
|
||||
exfat_flush_nodes(ef); /* ignore return code */
|
||||
exfat_flush(ef); /* ignore return code */
|
||||
exfat_put_node(ef, ef->root);
|
||||
exfat_reset_cache(ef);
|
||||
free(ef->root);
|
||||
|
||||
Reference in New Issue
Block a user