diff mbox

[OpenWrt-Devel] procd: patch v3 to support busybox mkfs.ext2

Message ID CAENjB=+u_QMpxPPNjC3bzLM9MxxQTAf+jPufbUi66LcRqwf0kA@mail.gmail.com
State Changes Requested
Delegated to: John Crispin
Headers show

Commit Message

Luke McKee July 3, 2016, 6:14 a.m. UTC
To quote Arjen:
If the only reason to switch to ext2 is to remove the journal, why not
just add

     -O ^has_journal

to the mount options?

----

That's not a mount option. That's a tune2fs option.

Journaling isn't the the only problem. The biggest problem is BLOAT.
You need libext2+e2fsprogs in a 4MB flash root image with the current
zram setup.
Would someone want /tmp on zram if they had to add all this to the 4MB
squashfs image.

-rw-r--r-- 1 lmc users 199739 Jul  3 06:15 e2fsprogs_1.43.1-1_mips_24kc.ipk
-rw-r--r-- 1 lmc users 151873 Jul  3 06:15 libext2fs_1.43.1-1_mips_24kc.ipk

The simple answer is most openwrt users would say no to this feature
do to how it's implemented.

I actually was going for ext2 like the original patch, but I was sold
that ext4 can mount ext2 formatted filesystems (without a journal)
(see man ext4). The ext4 filesystem driver vs ext2 does bloat a bit,
but I don't mind it as I can mount ext4 over nbd for my extroot.

Busybox is only 40k of source including the headers. mkfs.ext4 is 360k
compressed!
https://git.busybox.net/busybox/tree/util-linux/mkfs_ext2.c

Also -O ^has_journal is an tune2fs option not a mount option. And that
tune2fs feature isn't in busybox, hence the bloat issue.

"BusyBox v1.24.2 () multi-call binary.

Usage: tune2fs [-c MAX_MOUNT_COUNT] [-i DAYS] [-C MOUNT_COUNT] [-L
LABEL] BLOCKDEV

Adjust filesystem options on ext[23] filesystems"
Busybox tune2fs is useless.

So 90% of the userbase with size constrained flash file-systems will
want to use busybox mkfs.ext2 instead. busybox mkfs.ext2 and mkfs.ext2
don't conflict because the package installs in /usr/sbin and busybox
installs in /sbin

I move that the feature be dependent ONLY on busybox mkfs.ext2.
Busybox mount isn't required because procd includes sys/mount.h
In order words set the path to /sbin/mkfs.ext2 (busybox)

Attached is the new patch. Allow users in the Makefile configuration
to choose to use LZ4 (more speed ~15% less compression) if they so
desire.
John can do the makefile if and when he merges the patch.

I'm out of the debate now, I got it in my
lede/packgaes/system/procd/patches/ directory :) I'm happy

Comments

John Crispin July 3, 2016, 6:24 a.m. UTC | #1
Hi,

few comments

1) the patch needs to be split into 2, ext2 change/lzo change
2) send them inline please and not as attachement
3) the V3 needs to be in the subject prefix [PATCH V3] procd: ...
4) the Signed-off-by: line is missing

	John

On 03/07/2016 08:14, Luke McKee wrote:
> To quote Arjen:
> If the only reason to switch to ext2 is to remove the journal, why not
> just add
> 
>      -O ^has_journal
> 
> to the mount options?
> 
> ----
> 
> That's not a mount option. That's a tune2fs option.
> 
> Journaling isn't the the only problem. The biggest problem is BLOAT.
> You need libext2+e2fsprogs in a 4MB flash root image with the current
> zram setup.
> Would someone want /tmp on zram if they had to add all this to the 4MB
> squashfs image.
> 
> -rw-r--r-- 1 lmc users 199739 Jul  3 06:15 e2fsprogs_1.43.1-1_mips_24kc.ipk
> -rw-r--r-- 1 lmc users 151873 Jul  3 06:15 libext2fs_1.43.1-1_mips_24kc.ipk
> 
> The simple answer is most openwrt users would say no to this feature
> do to how it's implemented.
> 
> I actually was going for ext2 like the original patch, but I was sold
> that ext4 can mount ext2 formatted filesystems (without a journal)
> (see man ext4). The ext4 filesystem driver vs ext2 does bloat a bit,
> but I don't mind it as I can mount ext4 over nbd for my extroot.
> 
> Busybox is only 40k of source including the headers. mkfs.ext4 is 360k
> compressed!
> https://git.busybox.net/busybox/tree/util-linux/mkfs_ext2.c
> 
> Also -O ^has_journal is an tune2fs option not a mount option. And that
> tune2fs feature isn't in busybox, hence the bloat issue.
> 
> "BusyBox v1.24.2 () multi-call binary.
> 
> Usage: tune2fs [-c MAX_MOUNT_COUNT] [-i DAYS] [-C MOUNT_COUNT] [-L
> LABEL] BLOCKDEV
> 
> Adjust filesystem options on ext[23] filesystems"
> Busybox tune2fs is useless.
> 
> So 90% of the userbase with size constrained flash file-systems will
> want to use busybox mkfs.ext2 instead. busybox mkfs.ext2 and mkfs.ext2
> don't conflict because the package installs in /usr/sbin and busybox
> installs in /sbin
> 
> I move that the feature be dependent ONLY on busybox mkfs.ext2.
> Busybox mount isn't required because procd includes sys/mount.h
> In order words set the path to /sbin/mkfs.ext2 (busybox)
> 
> Attached is the new patch. Allow users in the Makefile configuration
> to choose to use LZ4 (more speed ~15% less compression) if they so
> desire.
> John can do the makefile if and when he merges the patch.
> 
> I'm out of the debate now, I got it in my
> lede/packgaes/system/procd/patches/ directory :) I'm happy
>
diff mbox

Patch

--- a/initd/zram.c	2016-07-03 06:39:51.011999930 +0700
+++ b/initd/zram.c	2016-07-03 07:00:34.143492847 +0700
@@ -82,7 +82,7 @@ 
 int
 mount_zram_on_tmp(void)
 {
-	char *mkfs[] = { "/usr/sbin/mkfs.ext4", "-b", "4096", "-F", "-L", "TEMP", "-m", "0", "/dev/zram0", NULL };
+	char *mkfs[] = { "/sbin/mkfs.ext2", "-b", "4096", "-F", "-L", "TEMP", "-m", "0", "/dev/zram0", NULL };
 	FILE *fp;
 	long zramsize;
 	pid_t pid;
@@ -94,6 +95,15 @@ 
 	}
 
 	mkdev("*", 0600);
+#ifdef ZRAM_TMPFS_LZ4	
+	fp = fopen("/sys/block/zram0/comp_algorithm", "r+");
+	if (fp == NULL) {
+		ERROR("Can't open /sys/block/zram0/comp_algorithm: %s\n", strerror(errno));
+		return errno;
+	}
+	fprintf(fp, "%s", "lz4" );
+	fclose(fp);
+#endif
 
 	zramsize = proc_meminfo() / 2;
 	fp = fopen("/sys/block/zram0/disksize", "r+");
@@ -107,10 +116,10 @@ 
 	pid = fork();
 	if (!pid) {
 		execvp(mkfs[0], mkfs);
-		ERROR("Can't exec /sbin/mkfs.ext4\n");
+		ERROR("Can't exec /sbin/mkfs.ext2\n");
 		exit(-1);
 	} else if (pid <= 0) {
-		ERROR("Can't exec /sbin/mkfs.ext4\n");
+		ERROR("Can't exec /sbin/mkfs.ext2\n");
 		return -1;
 	} else {
 		waitpid(pid, NULL, 0);