--- a/usr/share/live/build/functions/losetup.sh	2016-01-07 15:11:20.000000000 +0100
+++ b/usr/share/live/build/functions/losetup.sh	2016-01-10 01:47:51.547047098 +0100
@@ -61,19 +61,48 @@
 	fi
 }
 
+# stolen from lib/ext2fs/mkjournal.c , default block size is 4096 bytes (/etc/mke2fs.conf).
+ext2fs_default_journal_size()
+{
+	local SIZE="$1"
+	if [ "${SIZE}" -lt "8" ]; then # 2048*4096
+		JOURNAL_SIZE=0
+	elif [ "${SIZE}" -lt "128" ]; then # 32768*4096
+		JOURNAL_SIZE=4
+	elif [ "${SIZE}" -lt "1024" ]; then # 256*1024*4096
+		JOURNAL_SIZE=16
+	elif [ "${SIZE}" -lt "2048" ]; then # 512*1024*4096
+		JOURNAL_SIZE=32
+	elif [ "${SIZE}" -lt "4096" ]; then # 1024*1024*4096
+		JOURNAL_SIZE=64
+	else
+		JOURNAL_SIZE=128
+	fi
+}
+
 Calculate_partition_size ()
 {
 	ORIGINAL_SIZE="${1}"
 	FILESYSTEM="${2}"
 
 	case "${FILESYSTEM}" in
-		ext2|ext3|ext4)
+		ext2)
 			PERCENT="6"
 			;;
+		ext3|ext4)
+			PERCENT="6"
+			# to prevent endless loop.
+			if [ "${FIRST_CALL}" != "false" ]; then
+				FIRST_CALL="false"
+
+				ext2fs_default_journal_size $(Calculate_partition_size ${ORIGINAL_SIZE} ${FILESYSTEM})
+				ext2fs_default_journal_size $(Calculate_partition_size ${ORIGINAL_SIZE} ${FILESYSTEM})
+			fi
+			;;
 		*)
 			PERCENT="3"
 			;;
 	esac
 
-	echo $(expr ${ORIGINAL_SIZE} + ${ORIGINAL_SIZE} \* ${PERCENT} / 100 + 1)
+	echo $(expr ${ORIGINAL_SIZE} + ${ORIGINAL_SIZE} \* ${PERCENT} / 100 + ${JOURNAL_SIZE:-0} + 1)
 }
