Index: uspace/lib/ext4/libext4_directory.c
===================================================================
--- uspace/lib/ext4/libext4_directory.c	(revision 246a5aff54c0a6a8189eebf455b3e38be0dbc8d2)
+++ uspace/lib/ext4/libext4_directory.c	(revision 36d2c6fb6c85152a96f3739184035d9cd9149029)
@@ -312,5 +312,5 @@
 	ext4_directory_dx_entry_t *entries;
 	block_t *tmp_block = NULL;
-	uint32_t fblock;
+	uint32_t fblock, next_block;
 
 	root = (ext4_directory_dx_root_t *)root_block->data;
@@ -341,23 +341,23 @@
 		at = p - 1;
 
+		next_block = ext4_directory_dx_entry_get_block(at);
+
+		if (tmp_block) {
+        	block_put(tmp_block);
+        }
+
         if (indirect_level == 0) {
-       		*leaf_block_idx = ext4_directory_dx_entry_get_block(at);
-        	return EOK;
+        	return ext4_filesystem_get_inode_data_block_index(fs, inode, next_block, leaf_block_idx);
         }
 
         indirect_level--;
 
-        rc = ext4_filesystem_get_inode_data_block_index(fs, inode, ext4_directory_dx_entry_get_block(at), &fblock);
+        rc = ext4_filesystem_get_inode_data_block_index(fs, inode, next_block, &fblock);
         if (rc != EOK) {
         	return rc;
         }
 
-        if (tmp_block) {
-        	block_put(tmp_block);
-        }
-
         rc = block_get(&tmp_block, fs->device, fblock, BLOCK_FLAGS_NONE);
         if (rc != EOK) {
-        	// TODO
         	return rc;
         }
@@ -376,9 +376,49 @@
 	}
 
-	if (tmp_block) {
-		block_put(tmp_block);
-	}
-
+	// Unreachable
 	return EOK;
+}
+
+
+static int ext4_dirextory_dx_find_dir_entry(block_t *block,
+		ext4_superblock_t *sb, size_t name_len, const char *name,
+		ext4_directory_entry_ll_t **res_entry, aoff64_t *block_offset)
+{
+	ext4_directory_entry_ll_t *dentry;
+	uint16_t dentry_len;
+	uint8_t *addr_limit;
+	aoff64_t offset = 0;
+
+	dentry = (ext4_directory_entry_ll_t *)block->data;
+	addr_limit = block->data + ext4_superblock_get_block_size(sb);
+
+	while ((uint8_t *)dentry < addr_limit) {
+
+		if ((uint8_t*) dentry + name_len > addr_limit) {
+			break;
+		}
+
+		if (name_len == ext4_directory_entry_ll_get_name_length(sb, dentry)) {
+
+			if (bcmp((uint8_t *)name, dentry->name, name_len)) {
+				// TODO check entry ??
+				*block_offset = offset;
+				*res_entry = dentry;
+				return EOK;
+			}
+		}
+
+		// Goto next entry
+		dentry_len = ext4_directory_entry_ll_get_entry_length(dentry);
+        if (dentry_len <= 0) {
+        	// TODO
+        	return -1;
+        }
+
+		offset += dentry_len;
+		dentry = (ext4_directory_entry_ll_t *)((uint8_t *)dentry + dentry_len);
+	}
+
+	return ENOENT;
 }
 
@@ -389,6 +429,8 @@
 	int rc;
 	uint32_t root_block_addr, leaf_block_addr;
-	block_t *root_block;
+	aoff64_t block_offset;
+	block_t *root_block, *leaf_block;
 	ext4_hash_info_t hinfo;
+	ext4_directory_entry_ll_t *res_dentry;
 
 	// get direct block 0 (index root)
@@ -406,5 +448,4 @@
 	rc = ext4_directory_hinfo_init(&hinfo, root_block, fs->superblock, len, name);
 	if (rc != EOK) {
-		EXT4FS_DBG("ERR: leaf block not found");
 		block_put(root_block);
 		return EXT4_ERR_BAD_DX_DIR;
@@ -416,5 +457,21 @@
 	}
 
-	// TODO now having block - do directory entry search
+	rc = block_get(&leaf_block, fs->device, leaf_block_addr, BLOCK_FLAGS_NONE);
+	if (rc != EOK) {
+		return EXT4_ERR_BAD_DX_DIR;
+	}
+
+	rc = ext4_dirextory_dx_find_dir_entry(leaf_block, fs->superblock, len, name,
+			&res_dentry, &block_offset);
+
+	// Found = return it
+	if (rc == EOK) {
+		it->fs = fs;
+		it->inode_ref = inode_ref;
+		it->current_block = leaf_block;
+		it->current_offset = block_offset;
+		it->current = res_dentry;
+		return EOK;
+	}
 
 	// TODO delete it !!!
Index: uspace/srv/fs/ext4fs/ext4fs_ops.c
===================================================================
--- uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 246a5aff54c0a6a8189eebf455b3e38be0dbc8d2)
+++ uspace/srv/fs/ext4fs/ext4fs_ops.c	(revision 36d2c6fb6c85152a96f3739184035d9cd9149029)
@@ -238,5 +238,8 @@
 
 			inode = ext4_directory_entry_ll_get_inode(it.current);
-			return ext4fs_node_get_core(rfn, eparent->instance, inode);
+
+			rc = ext4fs_node_get_core(rfn, eparent->instance, inode);
+			ext4_directory_iterator_fini(&it);
+			return rc;
 		}
 
