170c2bd88SKozlowski Mateusz#!/usr/bin/env bash 2eb53c232Spaul luse# SPDX-License-Identifier: BSD-3-Clause 3eb53c232Spaul luse# Copyright (C) 2018 Intel Corporation 4eb53c232Spaul luse# All rights reserved. 5eb53c232Spaul luse# 670c2bd88SKozlowski Mateusztestdir=$(readlink -f $(dirname $0)) 770c2bd88SKozlowski Mateuszrootdir=$(readlink -f $testdir/../..) 870c2bd88SKozlowski Mateuszsource $rootdir/test/common/autotest_common.sh 970c2bd88SKozlowski Mateuszsource $testdir/common.sh 1070c2bd88SKozlowski Mateusz 1170c2bd88SKozlowski Mateuszrpc_py=$rootdir/scripts/rpc.py 1270c2bd88SKozlowski Mateusz 1370c2bd88SKozlowski Mateuszmount_dir=$(mktemp -d) 1470c2bd88SKozlowski Mateusz 1570c2bd88SKozlowski Mateuszwhile getopts ':u:c:f' opt; do 1670c2bd88SKozlowski Mateusz case $opt in 1770c2bd88SKozlowski Mateusz u) uuid=$OPTARG ;; 1870c2bd88SKozlowski Mateusz c) nv_cache=$OPTARG ;; 1970c2bd88SKozlowski Mateusz f) fast_shutdown=1 ;; 2070c2bd88SKozlowski Mateusz ?) echo "Usage: $0 [-f] [-u UUID] [-c NV_CACHE_PCI_BDF] BASE_PCI_BDF" && exit 1 ;; 2170c2bd88SKozlowski Mateusz esac 2270c2bd88SKozlowski Mateuszdone 2370c2bd88SKozlowski Mateuszshift $((OPTIND - 1)) 2470c2bd88SKozlowski Mateuszdevice=$1 2570c2bd88SKozlowski Mateusztimeout=240 2670c2bd88SKozlowski Mateusz 2770c2bd88SKozlowski Mateuszrestore_kill() { 2842899f1aSKozlowski Mateusz rm -f $testdir/testfile 2970c2bd88SKozlowski Mateusz rm -f $testdir/testfile.md5 3070c2bd88SKozlowski Mateusz rm -f $testdir/config/ftl.json 3170c2bd88SKozlowski Mateusz 3270c2bd88SKozlowski Mateusz killprocess $svcpid 3370c2bd88SKozlowski Mateusz remove_shm 3470c2bd88SKozlowski Mateusz} 3570c2bd88SKozlowski Mateusz 3670c2bd88SKozlowski Mateusztrap "restore_kill; exit 1" SIGINT SIGTERM EXIT 3770c2bd88SKozlowski Mateusz 3870c2bd88SKozlowski Mateusz"$SPDK_BIN_DIR/spdk_tgt" & 3970c2bd88SKozlowski Mateuszsvcpid=$! 4070c2bd88SKozlowski Mateusz# Wait until spdk_tgt starts 4170c2bd88SKozlowski Mateuszwaitforlisten $svcpid 4270c2bd88SKozlowski Mateusz 4370c2bd88SKozlowski Mateuszsplit_bdev=$(create_base_bdev nvme0 $device $((1024 * 101))) 4470c2bd88SKozlowski Mateuszif [ -n "$nv_cache" ]; then 4570c2bd88SKozlowski Mateusz nvc_bdev=$(create_nv_cache_bdev nvc0 $nv_cache $split_bdev) 4670c2bd88SKozlowski Mateuszfi 4770c2bd88SKozlowski Mateusz 4870c2bd88SKozlowski Mateuszl2p_dram_size_mb=$(($(get_bdev_size $split_bdev) * 10 / 100 / 1024)) 4970c2bd88SKozlowski Mateuszftl_construct_args="bdev_ftl_create -b ftl0 -d $split_bdev --l2p_dram_limit $l2p_dram_size_mb" 5070c2bd88SKozlowski Mateusz 5170c2bd88SKozlowski Mateusz[ -n "$uuid" ] && ftl_construct_args+=" -u $uuid" 5270c2bd88SKozlowski Mateusz[ -n "$nv_cache" ] && ftl_construct_args+=" -c $nvc_bdev" 5370c2bd88SKozlowski Mateusz 5470c2bd88SKozlowski Mateuszif [ "$fast_shutdown" -eq "1" ]; then 5542899f1aSKozlowski Mateusz ftl_construct_args+=" --fast-shutdown" 5670c2bd88SKozlowski Mateuszfi 5770c2bd88SKozlowski Mateusz 5842899f1aSKozlowski Mateusz$rpc_py -t $timeout $ftl_construct_args 5942899f1aSKozlowski Mateusz 6042899f1aSKozlowski Mateusz( 6142899f1aSKozlowski Mateusz echo '{"subsystems": [' 6242899f1aSKozlowski Mateusz $rpc_py save_subsystem_config -n bdev 6342899f1aSKozlowski Mateusz echo ']}' 6442899f1aSKozlowski Mateusz) > $testdir/config/ftl.json 651b566ac7Swanghailiangx$rpc_py bdev_ftl_unload -b ftl0 6670c2bd88SKozlowski Mateuszkillprocess $svcpid 6770c2bd88SKozlowski Mateusz 6842899f1aSKozlowski Mateusz# Generate random data and calculate checksum 6942899f1aSKozlowski Mateuszdd if=/dev/urandom of=$testdir/testfile bs=4K count=256K 7042899f1aSKozlowski Mateuszmd5sum $testdir/testfile > $testdir/testfile.md5 7170c2bd88SKozlowski Mateusz 7242899f1aSKozlowski Mateusz# Write and read back the data, verifying checksum 7342899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --if=$testdir/testfile --ob=ftl0 --json=$testdir/config/ftl.json 7442899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --ib=ftl0 --of=$testdir/testfile --json=$testdir/config/ftl.json --count=262144 7570c2bd88SKozlowski Mateusz 7670c2bd88SKozlowski Mateuszmd5sum -c $testdir/testfile.md5 7742899f1aSKozlowski Mateusz 78*34edd9f1SKamil Godzwon# Write second time at overlapped sectors, read back and verify checksum 7942899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --if=$testdir/testfile --ob=ftl0 --json=$testdir/config/ftl.json --seek=131072 8042899f1aSKozlowski Mateusz"$SPDK_BIN_DIR/spdk_dd" --ib=ftl0 --of=$testdir/testfile --json=$testdir/config/ftl.json --skip=131072 --count=262144 8142899f1aSKozlowski Mateusz 8242899f1aSKozlowski Mateuszmd5sum -c $testdir/testfile.md5 8370c2bd88SKozlowski Mateusz 8470c2bd88SKozlowski Mateusztrap - SIGINT SIGTERM EXIT 8570c2bd88SKozlowski Mateuszrestore_kill 86