With this patch, "-g android" enables project quota only by default, if the kernel is over v4.14. Otherwise, it enables usr/grp/proj all together.
1) -O quota : enables usr/grp 2) -O project_quota -O extra_attr : enabled prj 3) -O quota -O project_quota -O extra_attr : enables usr/grp/proj 4) -g android : enables proj (4.14+), usr/grp/proj (old kernel) 5) -g android -O project_quota -O extra_attr : enables usr/grp/proj Signed-off-by: Jaegeuk Kim <[email protected]> --- Change log from v2: - disable usr/grp for old kernels below 4.14 Change log from v1: - enable all quotas to keep backward compatibility mkfs/f2fs_format_main.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c index 8d4dbe1a28b1..6efe35fff2d2 100644 --- a/mkfs/f2fs_format_main.c +++ b/mkfs/f2fs_format_main.c @@ -31,6 +31,9 @@ #include "quota.h" #include "f2fs_format_utils.h" +#ifdef HAVE_SYS_UTSNAME_H +#include <sys/utsname.h> +#endif #ifdef WITH_ANDROID #include <sparse/sparse.h> extern struct sparse_file *f2fs_sparse_file; @@ -104,11 +107,34 @@ static void f2fs_show_info() MSG(0, "Info: Enable Compression\n"); } +#if defined(ANDROID_TARGET) && defined(HAVE_SYS_UTSNAME_H) +static bool kernel_version_over(unsigned int min_major, unsigned int min_minor) +{ + unsigned int major, minor; + struct utsname uts; + + if ((uname(&uts) != 0) || + (sscanf(uts.release, "%u.%u", &major, &minor) != 2)) + return false; + if (major > min_major) + return true; + if (major == min_major && minor >= min_minor) + return true; + return false; +} +#else +static bool kernel_version_over(unsigned int UNUSED(min_major), + unsigned int UNUSED(min_minor)) +{ + return false; +} +#endif + static void add_default_options(void) { switch (c.defset) { case CONF_ANDROID: - /* -d1 -f -O encrypt -O quota -O verity -w 4096 -R 0:0 */ + /* -d1 -f -w 4096 -R 0:0 */ c.dbg_lv = 1; force_overwrite = 1; c.wanted_sector_size = 4096; @@ -118,8 +144,12 @@ static void add_default_options(void) if (c.feature & cpu_to_le32(F2FS_FEATURE_RO)) return; + /* -O encrypt -O project_quota,extra_attr,{quota} -O verity */ c.feature |= cpu_to_le32(F2FS_FEATURE_ENCRYPT); - c.feature |= cpu_to_le32(F2FS_FEATURE_QUOTA_INO); + if (!kernel_version_over(4, 14)) + c.feature |= cpu_to_le32(F2FS_FEATURE_QUOTA_INO); + c.feature |= cpu_to_le32(F2FS_FEATURE_PRJQUOTA); + c.feature |= cpu_to_le32(F2FS_FEATURE_EXTRA_ATTR); c.feature |= cpu_to_le32(F2FS_FEATURE_VERITY); break; } -- 2.35.0.263.gb82422642f-goog _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
