Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 9b9d37bb7640f27fb362f617f494669ddd3490d3)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 7a68fe54c12652c8610c2dd4dc3a6726a771a930)
@@ -147,6 +147,4 @@
 int ext4fs_global_init(void)
 {
-	EXT4FS_DBG("");
-
 	if (!hash_table_create(&open_nodes, OPEN_NODES_BUCKETS,
 	    OPEN_NODES_KEYS, &open_nodes_ops)) {
@@ -159,6 +157,4 @@
 int ext4fs_global_fini(void)
 {
-	EXT4FS_DBG("");
-
 	hash_table_destroy(&open_nodes);
 	return EOK;
@@ -172,6 +168,4 @@
 int ext4fs_instance_get(service_id_t service_id, ext4fs_instance_t **inst)
 {
-	EXT4FS_DBG("");
-
 	ext4fs_instance_t *tmp;
 
@@ -200,6 +194,4 @@
 int ext4fs_root_get(fs_node_t **rfn, service_id_t service_id)
 {
-	EXT4FS_DBG("");
-
 	return ext4fs_node_get(rfn, service_id, EXT4_INODE_ROOT_INDEX);
 }
@@ -208,6 +200,4 @@
 int ext4fs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)
 {
-	EXT4FS_DBG("");
-
 	ext4fs_node_t *eparent = EXT4FS_NODE(pfn);
 	ext4_filesystem_t *fs;
@@ -413,5 +403,5 @@
 int ext4fs_create_node(fs_node_t **rfn, service_id_t service_id, int flags)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -422,5 +412,5 @@
 int ext4fs_destroy_node(fs_node_t *fn)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -431,5 +421,5 @@
 int ext4fs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -440,5 +430,5 @@
 int ext4fs_unlink(fs_node_t *pfn, fs_node_t *cfn, const char *nm)
 {
-	EXT4FS_DBG("");
+	EXT4FS_DBG("not supported");
 
 	// TODO
@@ -449,7 +439,49 @@
 int ext4fs_has_children(bool *has_children, fs_node_t *fn)
 {
-	EXT4FS_DBG("");
-
-	// TODO
+	ext4fs_node_t *enode = EXT4FS_NODE(fn);
+	ext4_directory_iterator_t it;
+	ext4_filesystem_t *fs;
+	int rc;
+	bool found = false;
+	size_t name_size;
+
+	fs = enode->instance->filesystem;
+
+	if (!ext4_inode_is_type(fs->superblock, enode->inode_ref->inode,
+	    EXT4_INODE_MODE_DIRECTORY)) {
+		*has_children = false;
+		return EOK;
+	}
+
+	rc = ext4_directory_iterator_init(&it, fs, enode->inode_ref, 0);
+	if (rc != EOK) {
+		return rc;
+	}
+
+	/* Find a non-empty directory entry */
+	while (it.current != NULL) {
+		if (it.current->inode != 0) {
+			name_size = ext4_directory_entry_ll_get_name_length(fs->superblock,
+				it.current);
+			if (!ext4fs_is_dots(&it.current->name, name_size)) {
+				found = true;
+				break;
+			}
+		}
+
+		rc = ext4_directory_iterator_next(&it);
+		if (rc != EOK) {
+			ext4_directory_iterator_fini(&it);
+			return rc;
+		}
+	}
+
+	rc = ext4_directory_iterator_fini(&it);
+	if (rc != EOK) {
+		return rc;
+	}
+
+	*has_children = found;
+
 	return EOK;
 }
@@ -482,8 +514,8 @@
 bool ext4fs_is_directory(fs_node_t *fn)
 {
-	EXT4FS_DBG("");
-
-	// TODO
-	return false;
+	ext4fs_node_t *enode = EXT4FS_NODE(fn);
+	bool is_dir = ext4_inode_is_type(enode->instance->filesystem->superblock,
+	    enode->inode_ref->inode, EXT4_INODE_MODE_DIRECTORY);
+	return is_dir;
 }
 
@@ -500,8 +532,6 @@
 service_id_t ext4fs_service_get(fs_node_t *fn)
 {
-	EXT4FS_DBG("");
-
-	// TODO
-	return 0;
+	ext4fs_node_t *enode = EXT4FS_NODE(fn);
+	return enode->instance->service_id;
 }
 
@@ -536,6 +566,4 @@
    fs_index_t *index, aoff64_t *size, unsigned *lnkcnt)
 {
-	EXT4FS_DBG("");
-
 	int rc;
 	ext4_filesystem_t *fs;
@@ -616,6 +644,4 @@
 static int ext4fs_unmounted(service_id_t service_id)
 {
-	EXT4FS_DBG("");
-
 	int rc;
 	ext4fs_instance_t *inst;
@@ -651,6 +677,4 @@
     size_t *rbytes)
 {
-	EXT4FS_DBG("");
-
 	ext4fs_instance_t *inst;
 	ext4_inode_ref_t *inode_ref;
@@ -712,5 +736,4 @@
     ext4fs_instance_t *inst, ext4_inode_ref_t *inode_ref, size_t *rbytes)
 {
-	EXT4FS_DBG("");
 
 	ext4_directory_iterator_t it;
@@ -720,4 +743,6 @@
 	int rc;
 	bool found = false;
+
+	EXT4FS_DBG("inode = \%d", inode_ref->index);
 
 	rc = ext4_directory_iterator_init(&it, inst->filesystem, inode_ref, pos);
@@ -732,4 +757,5 @@
 	 */
 	while (it.current != NULL) {
+
 		if (it.current->inode == 0) {
 			goto skip;
@@ -738,4 +764,10 @@
 		name_size = ext4_directory_entry_ll_get_name_length(
 		    inst->filesystem->superblock, it.current);
+
+
+		char* name = (char *)(&it.current->name);
+
+		EXT4FS_DBG("name: \%s", name);
+		EXT4FS_DBG("inode-number: \%d", it.current->inode);
 
 		/* skip . and .. */
@@ -878,4 +910,6 @@
     size_t *wbytes, aoff64_t *nsize)
 {
+	EXT4FS_DBG("not supported");
+
 	// TODO
 	return ENOTSUP;
@@ -886,4 +920,6 @@
 ext4fs_truncate(service_id_t service_id, fs_index_t index, aoff64_t size)
 {
+	EXT4FS_DBG("not supported");
+
 	// TODO
 	return ENOTSUP;
@@ -900,4 +936,6 @@
 static int ext4fs_destroy(service_id_t service_id, fs_index_t index)
 {
+	EXT4FS_DBG("not supported");
+
 	//TODO
 	return ENOTSUP;
@@ -907,4 +945,6 @@
 static int ext4fs_sync(service_id_t service_id, fs_index_t index)
 {
+	EXT4FS_DBG("not supported");
+
 	// TODO
 	return ENOTSUP;
