Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfe4df39 authored by Sultan Qasim Khan's avatar Sultan Qasim Khan Committed by Steve Kondik
Browse files

fs_mgr: zram: allow specifying stream count

This parameter allows specifying the number of parallel streams
to be used in compression and decompression. This option was added
in Linux 3.15, so it is not very common among devices currently on
the market, but it has been backported to some kernels. This option
must be set before zRAM is activated, as the kernel does not allow
switching from single stream to multistream compression once zRAM
is active.

Change-Id: I3f5ad96a65b3b4a6915d2700c398a236ea8931b0
parent 93a0c2a7
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@
#define FSCK_LOG_FILE   "/dev/fscklogs/log"

#define ZRAM_CONF_DEV   "/sys/block/zram0/disksize"
#define ZRAM_STREAMS    "/sys/block/zram0/max_comp_streams"

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))

@@ -871,6 +872,14 @@ int fs_mgr_swapon_all(struct fstab *fstab)
             */
            FILE *zram_fp;

            /* The stream count parameter is only available on new kernels.
             * It must be set before the disk size. */
            zram_fp = fopen(ZRAM_STREAMS, "r+");
            if (zram_fp) {
                fprintf(zram_fp, "%d\n", fstab->recs[i].zram_streams);
                fclose(zram_fp);
            }

            zram_fp = fopen(ZRAM_CONF_DEV, "r+");
            if (zram_fp == NULL) {
                ERROR("Unable to open zram conf device %s\n", ZRAM_CONF_DEV);
+6 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ struct fs_mgr_flag_values {
    int partnum;
    int swap_prio;
    unsigned int zram_size;
    unsigned int zram_streams;
};

struct flag_list {
@@ -74,6 +75,7 @@ static struct flag_list fs_mgr_flags[] = {
    { "noemulatedsd", MF_NOEMULATEDSD },
    { "notrim",       MF_NOTRIM },
    { "formattable", MF_FORMATTABLE },
    { "zramstreams=",MF_ZRAMSTREAMS },
    { "defaults",    0 },
    { 0,             0 },
};
@@ -106,6 +108,7 @@ static int parse_flags(char *flags, struct flag_list *fl,
        memset(flag_vals, 0, sizeof(*flag_vals));
        flag_vals->partnum = -1;
        flag_vals->swap_prio = -1; /* negative means it wasn't specified. */
        flag_vals->zram_streams = 1;
    }

    /* initialize fs_options to the null string */
@@ -178,6 +181,8 @@ static int parse_flags(char *flags, struct flag_list *fl,
                        flag_vals->zram_size = calculate_zram_size(val);
                    else
                        flag_vals->zram_size = val;
                } else if ((fl[i].flag == MF_ZRAMSTREAMS) && flag_vals) {
                    flag_vals->zram_streams = strtoll(strchr(p, '=') + 1, NULL, 0);
                }
                break;
            }
@@ -329,6 +334,7 @@ struct fstab *fs_mgr_read_fstab(const char *fstab_path)
        fstab->recs[cnt].partnum = flag_vals.partnum;
        fstab->recs[cnt].swap_prio = flag_vals.swap_prio;
        fstab->recs[cnt].zram_size = flag_vals.zram_size;
        fstab->recs[cnt].zram_streams = flag_vals.zram_streams;
        cnt++;
    }
    fclose(fstab_file);
+1 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@
#define MF_NOTRIM       0x1000
#define MF_FILEENCRYPTION 0x2000
#define MF_FORMATTABLE  0x4000
#define MF_ZRAMSTREAMS  0x8000

#define DM_BUF_SIZE 4096

+1 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ struct fstab_rec {
    int partnum;
    int swap_prio;
    unsigned int zram_size;
    unsigned int zram_streams;
};

// Callback function for verity status