@@ -40,13 +40,12 @@ log_info "------------- Starting $TESTNAME Test ------------"
4040
4141check_dependencies dd grep cut head tail udevadm
4242
43- # --- Kernel Config Checks ---
4443MANDATORY_CONFIGS=" CONFIG_SCSI_UFSHCD CONFIG_SCSI_UFS_QCOM"
4544OPTIONAL_CONFIGS=" CONFIG_SCSI_UFSHCD_PLATFORM CONFIG_SCSI_UFSHCD_PCI CONFIG_SCSI_UFS_CDNS_PLATFORM CONFIG_SCSI_UFS_HISI CONFIG_SCSI_UFS_EXYNOS CONFIG_SCSI_UFS_ROCKCHIP CONFIG_SCSI_UFS_BSG"
4645
4746log_info " Checking mandatory kernel configs for UFS..."
4847if ! check_kernel_config " $MANDATORY_CONFIGS " 2> /dev/null; then
49- log_skip " Missing one or more mandatory UFS kernel configs: $MANDATORY_CONFIGS "
48+ log_skip " Missing mandatory UFS kernel configs: $MANDATORY_CONFIGS "
5049 echo " $TESTNAME SKIP" > " $res_file "
5150 exit 0
5251fi
@@ -61,45 +60,19 @@ for cfg in $OPTIONAL_CONFIGS; do
6160done
6261[ -n " $missing_optional " ] && log_info " Optional configs not present but continuing:$missing_optional "
6362
64- # --- Device Tree Check ---
6563check_dt_nodes " /sys/bus/platform/devices/*ufs*" || {
6664 echo " $TESTNAME SKIP" > " $res_file "
6765 exit 0
6866}
6967
70- # --- UFS Block Detection ---
71- detect_ufs_partition_block () {
72- if command -v lsblk > /dev/null 2>&1 && command -v udevadm > /dev/null 2>&1 ; then
73- for part in $( lsblk -lnpo NAME,TYPE | awk ' $2 == "part" {print $1}' ) ; do
74- if udevadm info --query=all --name=" $part " 2> /dev/null | grep -qi " ufs" ; then
75- echo " $part "
76- return 0
77- fi
78- done
79- fi
80-
81- for part in /dev/sd[a-z][0-9]* ; do
82- [ -e " $part " ] || continue
83- if command -v udevadm > /dev/null 2>&1 &&
84- udevadm info --query=all --name=" $part " 2> /dev/null | grep -qi " ufs" ; then
85- echo " $part "
86- return 0
87- fi
88- done
89-
90- return 1
91- }
92-
9368block_dev=$( detect_ufs_partition_block)
9469if [ -z " $block_dev " ]; then
9570 log_skip " No UFS block device found."
9671 echo " $TESTNAME SKIP" > " $res_file "
9772 exit 0
9873fi
99-
10074log_info " Detected UFS block: $block_dev "
10175
102- # --- RootFS Detection ---
10376if command -v findmnt > /dev/null 2>&1 ; then
10477 rootfs_dev=$( findmnt -n -o SOURCE /)
10578else
11083resolved_block=$( readlink -f " $block_dev " 2> /dev/null)
11184resolved_rootfs=$( readlink -f " $rootfs_dev " 2> /dev/null)
11285
113- # --- Read Test (check if 'iflag=direct' supported) ---
114- log_info " Running basic read test on $block_dev (non-rootfs)..."
86+ if [ -n " $resolved_block " ] && [ -n " $resolved_rootfs " ] && [ " $resolved_block " = " $resolved_rootfs " ]; then
87+ log_warn " Detected block ($resolved_block ) is the root filesystem. Skipping read test."
88+ echo " $TESTNAME SKIP" > " $res_file "
89+ exit 0
90+ fi
11591
116- # Test for iflag=direct support
92+ log_info " Running basic read test on $block_dev (non-rootfs)... "
11793if echo | dd of=/dev/null iflag=direct 2> /dev/null; then
11894 DD_CMD=" dd if=$block_dev of=/dev/null bs=1M count=32 iflag=direct"
11995else
@@ -130,34 +106,41 @@ else
130106 exit 1
131107fi
132108
133- # --- I/O Stress Test ---
134109log_info " Running I/O stress test (64MB read+write on tmpfile)..."
135110tmpfile=" $test_path /ufs_test.img"
136111
137- # Prepare dd write command
138112if echo | dd of=/dev/null conv=fsync 2> /dev/null; then
139113 DD_WRITE=" dd if=/dev/zero of=$tmpfile bs=1M count=64 conv=fsync"
140114else
141115 log_warn " 'conv=fsync' not supported by dd. Using basic write."
142116 DD_WRITE=" dd if=/dev/zero of=$tmpfile bs=1M count=64"
143117fi
144118
145- # Use simplified dd read for BusyBox compatibility
146119if $DD_WRITE > /dev/null 2>&1 &&
147120 dd if=" $tmpfile " of=/dev/null bs=1M count=64 > /dev/null 2>&1 ; then
148121 log_pass " UFS I/O stress test passed"
122+ if command -v stat > /dev/null 2>&1 ; then
123+ stat --format=" [INFO] Size: %s bytes File: %n" " $tmpfile "
124+ else
125+ find " $tmpfile " -printf " [INFO] Size: %s bytes File: %p\n"
126+ fi
149127 rm -f " $tmpfile "
150128else
151129 log_fail " UFS I/O stress test failed"
152130 df -h . | sed ' s/^/[INFO] /'
153- ls -lh " $test_path " /ufs_test.img | sed ' s/^/[INFO] /'
154- rm -f " $tmpfile "
131+ if [ -f " $tmpfile " ]; then
132+ if command -v stat > /dev/null 2>&1 ; then
133+ stat --format=" [INFO] Size: %s bytes File: %n" " $tmpfile "
134+ else
135+ find " $tmpfile " -printf " [INFO] Size: %s bytes File: %p\n"
136+ fi
137+ rm -f " $tmpfile "
138+ fi
155139 echo " $TESTNAME FAIL" > " $res_file "
156140 exit 1
157141fi
158- # --- Dmesg Errors ---
159- scan_dmesg_errors " ufs" " $test_path "
160142
143+ scan_dmesg_errors " ufs" " $test_path "
161144log_pass " $TESTNAME completed successfully"
162145echo " $TESTNAME PASS" > " $res_file "
163146exit 0
0 commit comments