int ext3_block_to_path (struct inode * inode, long i_block, int * offsets, int * boundary);
To store the locations of file's data ext3 uses a data structure common for UNIX filesystems - tree of pointers anchored in the inode, with data blocks at leaves and indirect blocks in intermediate nodes. This function translates the block number into path in that tree - return value is the path length and offsets[n] is the offset of pointer to (n+1)th node in the nth one. If block is out of range (negative or too large) warning is printed and zero returned.
function doesn't find node addresses, so no IO is needed. All we need to know is the capacity of indirect blocks (taken from the inode->i_sb).