Add ext4 support

Change-Id: I87540a3204d1272eadaea58d3ac97eb0b98728ed
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
diff --git a/config.mk b/config.mk
index c01d188..6398b27 100644
--- a/config.mk
+++ b/config.mk
@@ -136,6 +136,7 @@
 ######################################################################
 # Now make a data image that contains all the target image files for the
 # installer.
+
 bootldr_bin := $(PRODUCT_OUT)/grub/grub.bin
 installer_target_data_files := \
 	$(INSTALLED_BOOTIMAGE_TARGET) \
@@ -143,6 +144,17 @@
 	$(INSTALLED_USERDATAIMAGE_TARGET) \
 	$(bootldr_bin)
 
+# $(1): src directory
+# $(2): output file
+# $(3): mount point
+# $(4): ext variant (ext2, ext3, ext4)
+# $(5): size of the partition
+define build-installerimage-ext-target
+  @mkdir -p $(dir $(2))
+    $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$(PATH) \
+          $(MKEXTUSERIMG) $(1) $(2) $(4) $(3) $(5)
+endef
+
 installer_data_img := $(TARGET_INSTALLER_OUT)/installer_data.img
 $(installer_data_img): $(diskinstaller_root)/config.mk \
 			$(installer_target_data_files) \
@@ -157,8 +169,8 @@
 		$(TARGET_INSTALLER_OUT)/data/system.img
 	cp -f $(INSTALLED_USERDATAIMAGE_TARGET) \
 		$(TARGET_INSTALLER_OUT)/data/userdata.img
-	$(call build-userimage-ext2-target,$(TARGET_INSTALLER_OUT)/data,$@,\
-		inst_data,)
+	$(call build-installerimage-ext-target,$(TARGET_INSTALLER_OUT)/data,$@, \
+		inst_data,ext4,$(BOARD_INSTALLERIMAGE_PARTITION_SIZE))
 	@echo --- Finished installer data image -[ $@ ]-
 
 ######################################################################
diff --git a/installer.c b/installer.c
index 357c210..5201452 100644
--- a/installer.c
+++ b/installer.c
@@ -247,7 +247,9 @@
             goto fail;
         }
 
-        if (!strcmp(tmp, "ext2"))
+        if (!strcmp(tmp, "ext4"))
+            journal_opts = "";
+        else if (!strcmp(tmp, "ext2"))
             journal_opts = "";
         else if (!strcmp(tmp, "ext3"))
             journal_opts = "-j";
@@ -313,6 +315,8 @@
         type = INSTALL_IMAGE_EXT2;
     } else if (!strcmp(tmp, "ext3")) {
         type = INSTALL_IMAGE_EXT3;
+    } else if (!strcmp(tmp, "ext4")) {
+        type = INSTALL_IMAGE_EXT4;
     } else {
         LOGE("Unknown image type '%s' for image %s", tmp, img->name);
         goto fail;
@@ -345,6 +349,9 @@
             }
             /* ...fall through... */
 
+        case INSTALL_IMAGE_EXT4:
+            /* fallthru */
+
         case INSTALL_IMAGE_EXT2:
             if (process_ext2_image(dest_part, filename, flags, test))
                 goto fail;
@@ -371,7 +378,7 @@
     char *inst_conf_file = "/system/etc/installer.conf";
     char *inst_data_dir = "/data";
     char *inst_data_dev = NULL;
-    char *data_fstype = "ext2";
+    char *data_fstype = "ext4";
     cnode *config;
     cnode *images;
     cnode *img;
diff --git a/installer.conf b/installer.conf
index acdd7a2..96b81e8 100644
--- a/installer.conf
+++ b/installer.conf
@@ -14,15 +14,13 @@
     system {
         partition system
         filename /data/system.img
-        type ext2
-        flags resize,addjournal
+        type raw
     }
 
     data {
         partition data
         filename /data/userdata.img
-        type ext2
-        flags resize,addjournal
+        type raw
     }
 
     cache {
diff --git a/installer.h b/installer.h
index 98bb2f9..a7108ae 100644
--- a/installer.h
+++ b/installer.h
@@ -24,6 +24,7 @@
 #define INSTALL_IMAGE_RAW          1
 #define INSTALL_IMAGE_EXT2         2
 #define INSTALL_IMAGE_EXT3         3
+#define INSTALL_IMAGE_EXT4         4
 #define INSTALL_IMAGE_TARGZ        10