libext2fs: Fix ext2fs_bmap() to work with extents and BMAP_ALLOC

Fix bugs with extents support when allocating blocks.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c
index e56a99a..be7ccbc 100644
--- a/lib/ext2fs/bmap.c
+++ b/lib/ext2fs/bmap.c
@@ -172,7 +172,7 @@
 		if (retval) {
 			/* If the extent is not found, return phys_blk = 0 */
 			if (retval == EXT2_ET_EXTENT_NOT_FOUND)
-				retval = 0;
+				goto got_block;
 			goto done;
 		}
 		retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
@@ -184,6 +184,7 @@
 			if (ret_flags && extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
 				*ret_flags |= BMAP_RET_UNINIT;
 		}
+	got_block:
 		if ((*phys_blk == 0) && (bmap_flags & BMAP_ALLOC)) {
 			retval = ext2fs_alloc_block(fs, b, block_buf, &b);
 			if (retval)
@@ -192,6 +193,10 @@
 							(blk64_t) b, 0);
 			if (retval)
 				goto done;
+			/* Update inode after setting extent */
+			retval = ext2fs_read_inode(fs, ino, inode);
+			if (retval)
+				return retval;
 			blocks_alloc++;
 			*phys_blk = b;
 		}