Index: uspace/lib/ext4/libext4_extent.c
===================================================================
--- uspace/lib/ext4/libext4_extent.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_extent.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -39,4 +39,21 @@
 #include "libext4_extent.h"
 
+uint32_t ext4_extent_get_first_block(ext4_extent_t *extent)
+{
+	return uint32_t_le2host(extent->first_block);
+}
+
+uint16_t ext4_extent_get_block_count(ext4_extent_t *extent)
+{
+	return uint16_t_le2host(extent->block_count);
+}
+
+uint64_t ext4_extent_get_start(ext4_extent_t *extent)
+{
+	return ((uint64_t)uint16_t_le2host(extent->start_hi)) << 32 |
+			((uint64_t)uint32_t_le2host(extent->start_lo));
+
+}
+
 uint16_t ext4_extent_header_get_magic(ext4_extent_header_t *header)
 {
Index: uspace/lib/ext4/libext4_extent.h
===================================================================
--- uspace/lib/ext4/libext4_extent.h	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_extent.h	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -69,4 +69,10 @@
 
 #define EXT4_EXTENT_MAGIC	0xF30A
+#define	EXT4_EXTENT_FIRST(header)	\
+		((ext4_extent_t *) (((void *) (header)) + sizeof(ext4_extent_header_t)))
+
+extern uint32_t ext4_extent_get_first_block(ext4_extent_t *);
+extern uint16_t ext4_extent_get_block_count(ext4_extent_t *);
+extern uint64_t ext4_extent_get_start(ext4_extent_t *);
 
 extern uint16_t ext4_extent_header_get_magic(ext4_extent_header_t *);
Index: uspace/lib/ext4/libext4_filesystem.c
===================================================================
--- uspace/lib/ext4/libext4_filesystem.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_filesystem.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -301,13 +301,10 @@
 	block_t *block;
 
-	// TODO extents
+	/* Handle inode using extents */
+	// TODO check "extents" feature in superblock ???
 	if (ext4_inode_has_flag(inode, EXT4_INODE_FLAG_EXTENTS)) {
-		EXT4FS_DBG("Inode contains Extent");
-		// TODO
-		/*
 		current_block = ext4_inode_get_extent_block(inode, iblock);
 		*fblock = current_block;
 		return EOK;
-		*/
 
 	}
Index: uspace/lib/ext4/libext4_inode.c
===================================================================
--- uspace/lib/ext4/libext4_inode.c	(revision acd869e9d6dfc10604382d2c9d33fc6ae253c156)
+++ uspace/lib/ext4/libext4_inode.c	(revision 8958a26d6d27095ad71146c9a2ef8bc3ccd02716)
@@ -104,6 +104,29 @@
 uint32_t ext4_inode_get_extent_block(ext4_inode_t *inode, uint64_t idx)
 {
-	//ext4_extent_header_t *header = ext4_inode_get_extent_header(inode);
-	// TODO search required block
+	ext4_extent_header_t *header = ext4_inode_get_extent_header(inode);
+
+	if (ext4_extent_header_get_depth(header) == 0) {
+
+		ext4_extent_t *extent = EXT4_EXTENT_FIRST(header);
+
+		// TODO more effective searching?
+		for (uint16_t i = 0; i < ext4_extent_header_get_entries_count(header); ++i) {
+
+			uint32_t first = ext4_extent_get_first_block(extent);
+			uint16_t count = ext4_extent_get_block_count(extent);
+			uint64_t block = 0;
+
+			if ((idx >= first) && (idx < first + count)) {
+				block = ext4_extent_get_start(extent) + idx;
+				block -= ext4_extent_get_first_block(extent);
+				return block;
+			}
+			// Go to the next extent
+			++extent;
+		}
+	}
+
+	// TODO binary search for depth > 0
+	EXT4FS_DBG("NOT IMPLEMENTED !!!");
 	return 0;
 
