Index: uspace/srv/fs/exfat/exfat_directory.c
===================================================================
--- uspace/srv/fs/exfat/exfat_directory.c	(revision cd860fc6d9852668f87681cb7d06dde1aa25aabe)
+++ uspace/srv/fs/exfat/exfat_directory.c	(revision 151a4e2c7233ca59f7a1ecaf7902cce6a47e2732)
@@ -249,4 +249,10 @@
 }
 
+int exfat_directory_sync_file(exfat_directory_t *di, 
+    exfat_file_dentry_t *df, exfat_stream_dentry_t *ds)
+{
+	return EOK;
+}
+
 int exfat_directory_write_file(exfat_directory_t *di, const char *name)
 {
Index: uspace/srv/fs/exfat/exfat_directory.h
===================================================================
--- uspace/srv/fs/exfat/exfat_directory.h	(revision cd860fc6d9852668f87681cb7d06dde1aa25aabe)
+++ uspace/srv/fs/exfat/exfat_directory.h	(revision 151a4e2c7233ca59f7a1ecaf7902cce6a47e2732)
@@ -71,4 +71,6 @@
 extern int exfat_directory_read_file(exfat_directory_t *di, char *name, 
     size_t size, exfat_file_dentry_t *df, exfat_stream_dentry_t *ds);
+extern int exfat_directory_sync_file(exfat_directory_t *di, 
+    exfat_file_dentry_t *df, exfat_stream_dentry_t *ds);
 extern int exfat_directory_write_file(exfat_directory_t *di, const char *name);
 extern int exfat_directory_erase_file(exfat_directory_t *di, aoff64_t pos);
Index: uspace/srv/fs/exfat/exfat_ops.c
===================================================================
--- uspace/srv/fs/exfat/exfat_ops.c	(revision cd860fc6d9852668f87681cb7d06dde1aa25aabe)
+++ uspace/srv/fs/exfat/exfat_ops.c	(revision 151a4e2c7233ca59f7a1ecaf7902cce6a47e2732)
@@ -112,36 +112,35 @@
 static int exfat_node_sync(exfat_node_t *node)
 {
-//	block_t *b;
-//	exfat_bs_t *bs;
-//	fat_dentry_t *d;
-//	int rc;
-
-//	assert(node->dirty);
-
-//	bs = block_bb_get(node->idx->devmap_handle);
-
-	/* Read the block that contains the dentry of interest. */
-/*
-	rc = _fat_block_get(&b, bs, node->idx->devmap_handle, node->idx->pfc,
-	    NULL, (node->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs),
-	    BLOCK_FLAGS_NONE);
-	if (rc != EOK)
-		return rc;
-
-	d = ((fat_dentry_t *)b->data) + (node->idx->pdi % DPS(bs));
-
-	d->firstc = host2uint16_t_le(node->firstc);
-	if (node->type == FAT_FILE) {
-		d->size = host2uint32_t_le(node->size);
-	} else if (node->type == FAT_DIRECTORY) {
-		d->attr = FAT_ATTR_SUBDIR;
-	}
-*/
-	/* TODO: update other fields? (e.g time fields) */
-
-//	b->dirty = true;		/* need to sync block */
-//	rc = block_put(b);
-//	return rc;
-	return EOK;
+	int rc;
+	exfat_directory_t di;
+	exfat_file_dentry_t df;
+	exfat_stream_dentry_t ds;
+
+	if (!(node->type == EXFAT_DIRECTORY || node->type == EXFAT_FILE))
+		return EOK;
+
+	if (node->type == EXFAT_DIRECTORY)
+		df.attr = EXFAT_ATTR_SUBDIR;
+	else
+		df.attr = 0;
+
+	ds.firstc = host2uint32_t_le(node->firstc);
+	if (node->size == 0 && node->firstc == 0) {
+		ds.flags = 0;
+	} else {
+		ds.flags = 1;
+		ds.flags |= (!node->fragmented << 1);
+	}
+	ds.valid_data_size = host2uint64_t_le(node->size);
+	ds.data_size = host2uint64_t_le(node->size);
+
+	exfat_directory_open_parent(&di, node->idx->devmap_handle, node->idx->pfc, 
+	    node->idx->parent_fragmented);
+	rc = exfat_directory_sync_file(&di, &df, &ds);
+	if (rc != EOK) {
+		(void) exfat_directory_close(&di);
+		return rc;
+	}
+	return exfat_directory_close(&di);
 }
 
