#!/bin/bash
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2017-2018 Western Digital Corporation or its affiliates.
#
# Test mkfs with data verification for block device backed ns.

. tests/nvme/rc

DESCRIPTION="run mkfs and data verification fio job on NVMeOF block device-backed ns"
TIMED=1

requires() {
	_have_program nvme && _have_program mkfs.xfs && _have_program fio && \
		_have_modules loop nvme-loop nvmet && _have_configfs
}

test() {
	echo "Running ${TEST_NAME}"

	modprobe nvmet
	modprobe nvme-loop

	local port
	local nvmedev
	local loop_dev
	local mount_dir="/mnt/blktests"
	local file_path="${TMPDIR}/img"
	local subsys_name="blktests-subsystem-1"

	mkdir -p "${mount_dir}" > /dev/null 2>&1

	truncate -s 1G "${file_path}"

	loop_dev="$(losetup -f --show "${file_path}")"

	_create_nvmet_subsystem "${subsys_name}" "${loop_dev}" \
		"91fdba0d-f87b-4c25-b80f-db7be1418b9e"
	port="$(_create_nvmet_port "loop")"
	_add_nvmet_subsys_to_port "${port}" "${subsys_name}"

	nvme connect -t loop -n "${subsys_name}"

	nvmedev="$(_find_nvme_loop_dev)"
	cat "/sys/block/${nvmedev}n1/uuid"
	cat "/sys/block/${nvmedev}n1/wwid"

	umount ${mount_dir} > /dev/null 2>&1

	mkfs.xfs -f /dev/"${nvmedev}n1" > /dev/null 2>&1

	mount /dev/"${nvmedev}n1" "${mount_dir}"

	_run_fio_verify_io --size=950m --directory="${mount_dir}/"

	umount "${mount_dir}" > /dev/null 2>&1

	nvme disconnect -n "${subsys_name}"

	_remove_nvmet_subsystem_from_port "${port}" "${subsys_name}"
	_remove_nvmet_subsystem "${subsys_name}"
	_remove_nvmet_port "${port}"

	losetup -d "${loop_dev}"

	rm -f local*verify*state
	rm "${file_path}"
	rm -fr "${mount_dir}"

	modprobe -r nvme_loop
	modprobe -r nvmet

	echo "Test complete"
}
