Support f2fs filesystem compression (needs kernel support and relevant fstab flags)

Change-Id: Ib90ce3a6c96eea84d3d7f6a88e85b931177df5d3
diff --git a/partition.cpp b/partition.cpp
index 2361dc3..7e0cb2c 100755
--- a/partition.cpp
+++ b/partition.cpp
@@ -166,6 +166,7 @@
 	TWFLAG_WRAPPEDKEY,
 	TWFLAG_ADOPTED_MOUNT_DELAY,
 	TWFLAG_DM_USE_ORIGINAL_PATH,
+	TWFLAG_FS_COMPRESS,
 	TWFLAG_LOGICAL,
 };
 
@@ -215,6 +216,7 @@
 	{ "wrappedkey",             TWFLAG_WRAPPEDKEY },
 	{ "adopted_mount_delay=",   TWFLAG_ADOPTED_MOUNT_DELAY },
 	{ "dm_use_original_path",   TWFLAG_DM_USE_ORIGINAL_PATH },
+	{ "fscompress",             TWFLAG_FS_COMPRESS },
 	{ "logical",                TWFLAG_LOGICAL },
 	{ 0,                        0 },
 };
@@ -283,6 +285,7 @@
 	Adopted_Mount_Delay = 0;
 	Original_Path = "";
 	Use_Original_Path = false;
+	Needs_Fs_Compress = false;
 }
 
 TWPartition::~TWPartition(void) {
@@ -1052,6 +1055,14 @@
 		case TWFLAG_LOGICAL:
 			Is_Super = true;
 			break;
+		case TWFLAG_FS_COMPRESS:
+			#ifdef TW_ENABLE_FS_COMPRESSION
+				Needs_Fs_Compress = true;
+				LOGINFO("Enabling 'fs compression'\n");
+			#else
+				LOGINFO("Ignoring the 'fscompress' fstab flag\n");
+			#endif
+			break;
 		default:
 			// Should not get here
 			LOGINFO("Flag identified for processing, but later unmatched: %i\n", flag);
@@ -2488,6 +2499,9 @@
 	if(needs_casefold)
 		f2fs_command += " -O casefold -C utf8";
 
+	if (Needs_Fs_Compress)
+		f2fs_command += " -O compression,extra_attr";
+
 	f2fs_command += " " + Actual_Block_Device + " " + dev_sz_str;
 
 	if (TWFunc::Path_Exists("/system/bin/sload_f2fs")) {