#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2017 Omar Sandoval
#
# Tests LO_FLAGS_BLOCKSIZE together with LO_FLAGS_DIRECT_IO.

. tests/loop/rc
. common/scsi_debug

DESCRIPTION="combine loop direct I/O mode and a custom block size"
QUICK=1

requires() {
	_have_program xfs_io
	_have_module scsi_debug
	_have_src_program loblksize
	_have_loop_set_block_size
}

test() {
	local loop_dev

	echo "Running ${TEST_NAME}"

	if ! _init_scsi_debug sector_size=4096; then
		return 1
	fi

	if ! loop_dev="$(losetup -f --show "/dev/${SCSI_DEBUG_DEVICES[0]}")"; then
		_exit_scsi_debug
		return 1
	fi

	udevadm settle
	src/loblksize "$loop_dev" 4096
	losetup --direct-io=on "$loop_dev"
	cat "/sys/block/${loop_dev#/dev/}/loop/dio"
	xfs_io -f -d -c 'pwrite 0 4096' "$loop_dev" >/dev/null
	dd if="$loop_dev" bs=4096 count=1 iflag=direct status=none | sha256sum

	losetup -d "$loop_dev"
	udevadm settle
	_exit_scsi_debug

	echo "Test complete"
}
