public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Yang Xu <xuyang2018.jy@fujitsu.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v5 2/4] zram/zram_lib.sh: adapt the situation that zram device is being used
Date: Mon, 20 Dec 2021 11:45:12 +0100	[thread overview]
Message-ID: <YcBeuHSm65VC8qmA@pevik> (raw)
In-Reply-To: <1639983142-2247-2-git-send-email-xuyang2018.jy@fujitsu.com>

Hi Xu,

> If zram-generator package is installed and works, then we can not remove zram module
> because zram swap is being used. This case needs a clean zram environment, change this
> test by using hot_add/hot_remove interface[1]. So even zram device is being used, we
> still can add zram device and remove them in cleanup.

> The two interface was introduced since kernel commit 6566d1a32("zram: add dynamic
> device add/remove functionality")[2] in 2015.6. If kernel supports these two interface,
nit: instead of date (a bit non standard written) I'd just mention the kernel
release, i.e. v4.2-rc1.

> we use hot_add/hot_remove to slove this problem, if not, just check whether zram is
> being used or built in, then skip it on old kernel.

> Also, zram01,02 case are adjuested to adapt the situation that CONFIG_ZRAM=y and can
> run zram01,02 simultaneously on new kernel.

> [1]https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html#add-remove-zram-devices
> [2]https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6566d1a32bf7

> -	modprobe zram num_devices=$dev_num || \
> -		tst_brk TBROK "failed to insert zram module"
> +# On kernel that supports /sys/class/zram-control interface but doesn't load zram,
> +# we dont' need to use hot_add/hot_remove interface. If system has loaded zram
> +# or buitin, we need to use hot_add/hot_remove interface.
> +# On old kernel that doesn't support /sys/class/zram-control interface, we just
> +# check whether zram module is being used or it is built in kernel(we can't create
> +# number of devices required). If so, skip it.
> +	if [ ! -d "/sys/class/zram-control" ]; then
> +		modprobe zram num_devices=$dev_num
> +		if [ ! -d "/sys/class/zram-control" ]; then
> +			if grep -q '^zram' /proc/modules; then
> +				rmmod zram > /dev/null 2>&1 || \
> +					tst_brk TCONF "zram module is being used"
nit: I'd be more clear already in the output.

> +			else
> +				tst_brk TCONF "test needs CONFIG_ZRAM=m"
Also here I'd somehow mention the old kernel.
> +			fi
> +			modprobe zram num_devices=$dev_num
> +		fi
> +		module_load=1
> +		dev_end=$(($dev_num - 1))
> +		tst_res TPASS "all zram devices (/dev/zram0~$dev_end) successfully created"
> +		return
> +	fi
> -	dev_num_created=$(ls /dev/zram* | wc -w)
> +	dev_start=$(ls /dev/zram* | wc -w)
> +	dev_end=$(($dev_start + $dev_num - 1))
> +	sys_control=1

> -	if [ "$dev_num_created" -ne "$dev_num" ]; then
> -		tst_brk TFAIL "unexpected num of devices: $dev_num_created"
> -	fi
> +	for i in $(seq  $dev_start $dev_end); do
> +		cat /sys/class/zram-control/hot_add > /dev/null
> +	done

> -	tst_res TPASS "all zram devices successfully created"
> +	tst_res TPASS "all zram devices (/dev/zram$dev_start~$dev_end) successfully created"
>  }

IMHO this should work and be a bit more readable
(put extra TINFO to help understand the problem on failure or what has been
tested):

	tst_res TINFO "create '$dev_num' zram device(s)"

	# zram module loaded, new kernel
	if [ -d "/sys/class/zram-control" ]; then
		tst_res TINFO "zram module already loaded, kernel supports zram-control interface"
		dev_start=$(ls /dev/zram* | wc -w)
		dev_end=$(($dev_start + $dev_num - 1))
		sys_control=1

		for i in $(seq  $dev_start $dev_end); do
			cat /sys/class/zram-control/hot_add > /dev/null
		done

		tst_res TPASS "all zram devices (/dev/zram$dev_start~$dev_end) successfully created"
		return
	fi

	modprobe zram num_devices=$dev_num

	# detect old kernel or built-in
	if [ ! -d "/sys/class/zram-control" ]; then
		if grep -q '^zram' /proc/modules; then
			rmmod zram > /dev/null 2>&1 || \
				tst_brk TCONF "zram module is being used on old kernel without zram-control interface"
		else
			tst_brk TCONF "test needs CONFIG_ZRAM=m on old kernel without zram-control interface"
		fi
		modprobe zram num_devices=$dev_num
	fi

	module_load=1
	dev_end=$(($dev_num - 1))
	tst_res TPASS "all zram devices (/dev/zram0~$dev_end) successfully created"
}


Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2021-12-20 10:45 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-20  6:52 [LTP] [PATCH v5 1/4] swapping01: skip test if zram-swap is being used Yang Xu
2021-12-20  6:52 ` [LTP] [PATCH v5 2/4] zram/zram_lib.sh: adapt the situation that zram device " Yang Xu
2021-12-20 10:45   ` Petr Vorel [this message]
2021-12-21  1:33     ` xuyang2018.jy
2021-12-20  6:52 ` [LTP] [PATCH v5 3/4] zram/zram03: Convert into new api Yang Xu
2021-12-20  6:52 ` [LTP] [PATCH v5 4/4] zram/zram01.sh: replacing data stored in this disk with allocated for this disk Yang Xu
2021-12-20 10:49   ` Petr Vorel
2021-12-21  2:18     ` xuyang2018.jy
2021-12-21  8:41       ` Petr Vorel
2021-12-22  9:33         ` xuyang2018.jy
2021-12-22 14:12           ` Petr Vorel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YcBeuHSm65VC8qmA@pevik \
    --to=pvorel@suse.cz \
    --cc=ltp@lists.linux.it \
    --cc=xuyang2018.jy@fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox