test_integrity_01.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
  4. ERR_CODE=0
  5. _check_value() {
  6. local name=$1
  7. local actual=$2
  8. local expected=$3
  9. if [ "$actual" != "$expected" ]; then
  10. echo "$name $actual != $expected"
  11. ERR_CODE=255
  12. return 1
  13. fi
  14. return 0
  15. }
  16. _test_metadata_only() {
  17. local dev_id
  18. dev_id=$(_add_ublk_dev -t null -u --no_auto_part_scan --metadata_size 8)
  19. _check_add_dev "$TID" $?
  20. _check_value "metadata_size" "$(_get_metadata_size "$dev_id" metadata_size)" 8 &&
  21. _check_value "pi_offset" "$(_get_metadata_size "$dev_id" pi_offset)" 0 &&
  22. _check_value "pi_tuple_size" "$(_get_metadata_size "$dev_id" pi_tuple_size)" 0 &&
  23. _check_value "device_is_integrity_capable" \
  24. "$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_capable")" 0 &&
  25. _check_value "format" "$(cat "/sys/block/ublkb$dev_id/integrity/format")" nop &&
  26. _check_value "protection_interval_bytes" \
  27. "$(cat "/sys/block/ublkb$dev_id/integrity/protection_interval_bytes")" 512 &&
  28. _check_value "tag_size" "$(cat "/sys/block/ublkb$dev_id/integrity/tag_size")" 0
  29. _ublk_del_dev "${dev_id}"
  30. }
  31. _test_integrity_capable_ip() {
  32. local dev_id
  33. dev_id=$(_add_ublk_dev -t null -u --no_auto_part_scan --integrity_capable --metadata_size 64 --pi_offset 56 --csum_type ip)
  34. _check_add_dev "$TID" $?
  35. _check_value "metadata_size" "$(_get_metadata_size "$dev_id" metadata_size)" 64 &&
  36. _check_value "pi_offset" "$(_get_metadata_size "$dev_id" pi_offset)" 56 &&
  37. _check_value "pi_tuple_size" "$(_get_metadata_size "$dev_id" pi_tuple_size)" 8 &&
  38. _check_value "device_is_integrity_capable" \
  39. "$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_capable")" 1 &&
  40. _check_value "format" "$(cat "/sys/block/ublkb$dev_id/integrity/format")" T10-DIF-TYPE3-IP &&
  41. _check_value "protection_interval_bytes" \
  42. "$(cat "/sys/block/ublkb$dev_id/integrity/protection_interval_bytes")" 512 &&
  43. _check_value "tag_size" "$(cat "/sys/block/ublkb$dev_id/integrity/tag_size")" 0
  44. _ublk_del_dev "${dev_id}"
  45. }
  46. _test_integrity_reftag_t10dif() {
  47. local dev_id
  48. dev_id=$(_add_ublk_dev -t null -u --no_auto_part_scan --integrity_reftag --metadata_size 8 --csum_type t10dif)
  49. _check_add_dev "$TID" $?
  50. _check_value "metadata_size" "$(_get_metadata_size "$dev_id" metadata_size)" 8 &&
  51. _check_value "pi_offset" "$(_get_metadata_size "$dev_id" pi_offset)" 0 &&
  52. _check_value "pi_tuple_size" "$(_get_metadata_size "$dev_id" pi_tuple_size)" 8 &&
  53. _check_value "device_is_integrity_capable" \
  54. "$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_capable")" 0 &&
  55. _check_value "format" "$(cat "/sys/block/ublkb$dev_id/integrity/format")" T10-DIF-TYPE1-CRC &&
  56. _check_value "protection_interval_bytes" \
  57. "$(cat "/sys/block/ublkb$dev_id/integrity/protection_interval_bytes")" 512 &&
  58. _check_value "tag_size" "$(cat "/sys/block/ublkb$dev_id/integrity/tag_size")" 0
  59. _ublk_del_dev "${dev_id}"
  60. }
  61. _test_nvme_csum() {
  62. local dev_id
  63. dev_id=$(_add_ublk_dev -t null -u --no_auto_part_scan --metadata_size 16 --csum_type nvme --tag_size 8)
  64. _check_add_dev "$TID" $?
  65. _check_value "metadata_size" "$(_get_metadata_size "$dev_id" metadata_size)" 16 &&
  66. _check_value "pi_offset" "$(_get_metadata_size "$dev_id" pi_offset)" 0 &&
  67. _check_value "pi_tuple_size" "$(_get_metadata_size "$dev_id" pi_tuple_size)" 16 &&
  68. _check_value "device_is_integrity_capable" \
  69. "$(cat "/sys/block/ublkb$dev_id/integrity/device_is_integrity_capable")" 0 &&
  70. _check_value "format" "$(cat "/sys/block/ublkb$dev_id/integrity/format")" EXT-DIF-TYPE3-CRC64 &&
  71. _check_value "protection_interval_bytes" \
  72. "$(cat "/sys/block/ublkb$dev_id/integrity/protection_interval_bytes")" 512 &&
  73. _check_value "tag_size" "$(cat "/sys/block/ublkb$dev_id/integrity/tag_size")" 8
  74. _ublk_del_dev "${dev_id}"
  75. }
  76. _prep_test "null" "integrity params"
  77. _test_metadata_only
  78. _test_integrity_capable_ip
  79. _test_integrity_reftag_t10dif
  80. _test_nvme_csum
  81. _cleanup_test
  82. _show_result "$TID" $ERR_CODE