1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh 5 6ERR_CODE=0 7 8format_backing_file() 9{ 10 local backing_file=$1 11 12 # Create ublk device to write partition table 13 local tmp_dev=$(_add_ublk_dev -t loop "${backing_file}") 14 [ $? -ne 0 ] && return 1 15 16 # Write partition table with sfdisk 17 sfdisk /dev/ublkb"${tmp_dev}" > /dev/null 2>&1 <<EOF 18label: dos 19start=2048, size=100MiB, type=83 20start=206848, size=100MiB, type=83 21EOF 22 local ret=$? 23 24 "${UBLK_PROG}" del -n "${tmp_dev}" 25 26 return $ret 27} 28 29test_auto_part_scan() 30{ 31 local backing_file=$1 32 33 # Create device WITHOUT --no_auto_part_scan 34 local dev_id=$(_add_ublk_dev -t loop "${backing_file}") 35 [ $? -ne 0 ] && return 1 36 37 udevadm settle 38 39 # Partitions should be auto-detected 40 if [ ! -e /dev/ublkb"${dev_id}"p1 ] || [ ! -e /dev/ublkb"${dev_id}"p2 ]; then 41 "${UBLK_PROG}" del -n "${dev_id}" 42 return 1 43 fi 44 45 "${UBLK_PROG}" del -n "${dev_id}" 46 return 0 47} 48 49test_no_auto_part_scan() 50{ 51 local backing_file=$1 52 53 # Create device WITH --no_auto_part_scan 54 local dev_id=$(_add_ublk_dev -t loop --no_auto_part_scan "${backing_file}") 55 [ $? -ne 0 ] && return 1 56 57 udevadm settle 58 59 # Partitions should NOT be auto-detected 60 if [ -e /dev/ublkb"${dev_id}"p1 ]; then 61 "${UBLK_PROG}" del -n "${dev_id}" 62 return 1 63 fi 64 65 # Manual scan should work 66 blockdev --rereadpt /dev/ublkb"${dev_id}" > /dev/null 2>&1 67 udevadm settle 68 69 if [ ! -e /dev/ublkb"${dev_id}"p1 ] || [ ! -e /dev/ublkb"${dev_id}"p2 ]; then 70 "${UBLK_PROG}" del -n "${dev_id}" 71 return 1 72 fi 73 74 "${UBLK_PROG}" del -n "${dev_id}" 75 return 0 76} 77 78if ! _have_program sfdisk || ! _have_program blockdev; then 79 exit "$UBLK_SKIP_CODE" 80fi 81 82_prep_test "generic" "test UBLK_F_NO_AUTO_PART_SCAN" 83 84if ! _have_feature "UBLK_F_NO_AUTO_PART_SCAN"; then 85 _cleanup_test "generic" 86 exit "$UBLK_SKIP_CODE" 87fi 88 89 90# Create and format backing file with partition table 91_create_backfile 0 256M 92format_backing_file "${UBLK_BACKFILES[0]}" 93[ $? -ne 0 ] && ERR_CODE=255 94 95# Test normal auto partition scan 96[ "$ERR_CODE" -eq 0 ] && test_auto_part_scan "${UBLK_BACKFILES[0]}" 97[ $? -ne 0 ] && ERR_CODE=255 98 99# Test no auto partition scan with manual scan 100[ "$ERR_CODE" -eq 0 ] && test_no_auto_part_scan "${UBLK_BACKFILES[0]}" 101[ $? -ne 0 ] && ERR_CODE=255 102 103_cleanup_test "generic" 104_show_result $TID $ERR_CODE 105