#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2022 Google LLC

. tests/zbd/rc
. common/null_blk
. common/scsi_debug

DESCRIPTION="test gap zone support with F2FS"
QUICK=1

requires() {
	_have_fio
	_have_driver f2fs
	_have_module null_blk
	_have_module_param scsi_debug zone_cap_mb
	_have_program mkfs.f2fs
	_have_module scsi_debug
}

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

	local mount_dir="$TMPDIR/mnt"

	local null_blk_params=(
		blocksize=4096
		completion_nsec=0
		memory_backed=1
		size=1024 # MB
		submit_queues=1
		power=1
	)
	_init_null_blk nr_devices=0 queue_mode=2 &&
	_configure_null_blk nullb0 "${null_blk_params[@]}" || return $?
	local cdev=/dev/nullb0

	local scsi_debug_params=(
		delay=0
		dev_size_mb=1024
		sector_size=4096
		zbc=host-managed
		zone_cap_mb=3
		zone_nr_conv=0
		zone_size_mb=4
	)
	_init_scsi_debug "${scsi_debug_params[@]}" &&
	local zdev="/dev/${SCSI_DEBUG_DEVICES[0]}" fail &&
	ls -ld "${cdev}" "${zdev}" >>"${FULL}" &&
	mkfs.f2fs -m "${cdev}" -c "${zdev}" >>"${FULL}" 2>&1 &&
	mkdir -p "${mount_dir}" &&
	mount -t f2fs "${cdev}" "${mount_dir}" &&
	local fio_args=(
		--size=1M
		--directory="${mount_dir}"
		--time_based
		--runtime=10
	) &&
	_run_fio_verify_io "${fio_args[@]}" >>"${FULL}" 2>&1 ||
	fail=true

	umount "${mount_dir}" >>"${FULL}" 2>&1
	_exit_scsi_debug
	_exit_null_blk

	if [ -z "$fail" ]; then
		echo "Test complete"
	else
		echo "Test failed"
		return 1
	fi
}
