From 3ea902f25291e7c91a3a8f73d0f64bfd3de548b6 Mon Sep 17 00:00:00 2001 From: Iliyan Malchev Date: Fri, 1 May 2015 14:05:04 -0700 Subject: fs_mgr: allow for zramsize to be specified as percentage of total memory If the zramsize entry has a % size at the end, as in the following example: /dev/block/zram0 none swap defaults zramsize=25% then we will set the value as that percentage of total RAM, as read by scanning /proc/meminfo. b/20760266 Seed common build allocated too much for zRAM-backed swap Change-Id: I17c91d311ba99ae7adae112bfe1b38542ea69b80 Signed-off-by: Iliyan Malchev --- fs_mgr/fs_mgr_fstab.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'fs_mgr') diff --git a/fs_mgr/fs_mgr_fstab.c b/fs_mgr/fs_mgr_fstab.c index ab8f128..c200b05 100644 --- a/fs_mgr/fs_mgr_fstab.c +++ b/fs_mgr/fs_mgr_fstab.c @@ -15,10 +15,12 @@ */ #include +#include #include #include #include #include +#include #include "fs_mgr_priv.h" @@ -72,6 +74,19 @@ static struct flag_list fs_mgr_flags[] = { { 0, 0 }, }; +static uint64_t calculate_zram_size(unsigned int percentage) +{ + uint64_t total; + + total = sysconf(_SC_PHYS_PAGES); + total *= percentage; + total /= 100; + + total *= sysconf(_SC_PAGESIZE); + + return total; +} + static int parse_flags(char *flags, struct flag_list *fl, struct fs_mgr_flag_values *flag_vals, char *fs_options, int fs_options_len) @@ -145,7 +160,12 @@ static int parse_flags(char *flags, struct flag_list *fl, } else if ((fl[i].flag == MF_SWAPPRIO) && flag_vals) { flag_vals->swap_prio = strtoll(strchr(p, '=') + 1, NULL, 0); } else if ((fl[i].flag == MF_ZRAMSIZE) && flag_vals) { - flag_vals->zram_size = strtoll(strchr(p, '=') + 1, NULL, 0); + int is_percent = !!strrchr(p, '%'); + unsigned int val = strtoll(strchr(p, '=') + 1, NULL, 0); + if (is_percent) + flag_vals->zram_size = calculate_zram_size(val); + else + flag_vals->zram_size = val; } break; } -- cgit v1.1