162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later
362306a36Sopenharmony_ci# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
462306a36Sopenharmony_ci#
562306a36Sopenharmony_ci# Test creates several zram devices with different filesystems on them.
662306a36Sopenharmony_ci# It fills each device with zeros and checks that compression works.
762306a36Sopenharmony_ci#
862306a36Sopenharmony_ci# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
962306a36Sopenharmony_ci# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciTCID="zram01"
1262306a36Sopenharmony_ciERR_CODE=0
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci. ./zram_lib.sh
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci# Test will create the following number of zram devices:
1762306a36Sopenharmony_cidev_num=1
1862306a36Sopenharmony_ci# This is a list of parameters for zram devices.
1962306a36Sopenharmony_ci# Number of items must be equal to 'dev_num' parameter.
2062306a36Sopenharmony_cizram_max_streams="2"
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci# The zram sysfs node 'disksize' value can be either in bytes,
2362306a36Sopenharmony_ci# or you can use mem suffixes. But in some old kernels, mem
2462306a36Sopenharmony_ci# suffixes are not supported, for example, in RHEL6.6GA's kernel
2562306a36Sopenharmony_ci# layer, it uses strict_strtoull() to parse disksize which does
2662306a36Sopenharmony_ci# not support mem suffixes, in some newer kernels, they use
2762306a36Sopenharmony_ci# memparse() which supports mem suffixes. So here we just use
2862306a36Sopenharmony_ci# bytes to make sure everything works correctly.
2962306a36Sopenharmony_cizram_sizes="2097152" # 2MB
3062306a36Sopenharmony_cizram_mem_limits="2M"
3162306a36Sopenharmony_cizram_filesystems="ext4"
3262306a36Sopenharmony_cizram_algs="lzo"
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cizram_fill_fs()
3562306a36Sopenharmony_ci{
3662306a36Sopenharmony_ci	for i in $(seq $dev_start $dev_end); do
3762306a36Sopenharmony_ci		echo "fill zram$i..."
3862306a36Sopenharmony_ci		local b=0
3962306a36Sopenharmony_ci		while [ true ]; do
4062306a36Sopenharmony_ci			dd conv=notrunc if=/dev/zero of=zram${i}/file \
4162306a36Sopenharmony_ci				oflag=append count=1 bs=1024 status=none \
4262306a36Sopenharmony_ci				> /dev/null 2>&1 || break
4362306a36Sopenharmony_ci			b=$(($b + 1))
4462306a36Sopenharmony_ci		done
4562306a36Sopenharmony_ci		echo "zram$i can be filled with '$b' KB"
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci		local mem_used_total=`awk '{print $3}' "/sys/block/zram$i/mm_stat"`
4862306a36Sopenharmony_ci		local v=$((100 * 1024 * $b / $mem_used_total))
4962306a36Sopenharmony_ci		if [ "$v" -lt 100 ]; then
5062306a36Sopenharmony_ci			 echo "FAIL compression ratio: 0.$v:1"
5162306a36Sopenharmony_ci			 ERR_CODE=-1
5262306a36Sopenharmony_ci			 return
5362306a36Sopenharmony_ci		fi
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci		echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK"
5662306a36Sopenharmony_ci	done
5762306a36Sopenharmony_ci}
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cicheck_prereqs
6062306a36Sopenharmony_cizram_load
6162306a36Sopenharmony_cizram_max_streams
6262306a36Sopenharmony_cizram_compress_alg
6362306a36Sopenharmony_cizram_set_disksizes
6462306a36Sopenharmony_cizram_set_memlimit
6562306a36Sopenharmony_cizram_makefs
6662306a36Sopenharmony_cizram_mount
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cizram_fill_fs
6962306a36Sopenharmony_cizram_cleanup
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ciif [ $ERR_CODE -ne 0 ]; then
7262306a36Sopenharmony_ci	echo "$TCID : [FAIL]"
7362306a36Sopenharmony_cielse
7462306a36Sopenharmony_ci	echo "$TCID : [PASS]"
7562306a36Sopenharmony_cifi
76