/tests/zfs-tests/tests/functional/reservation/reservation_017_pos.ksh

https://github.com/adilger/zfs · Korn Shell · 101 lines · 44 code · 12 blank · 45 comment · 6 complexity · 10c79c96bd16e0c656094d515f0a40fa MD5 · raw file

  1. #!/bin/ksh -p
  2. #
  3. # CDDL HEADER START
  4. #
  5. # The contents of this file are subject to the terms of the
  6. # Common Development and Distribution License (the "License").
  7. # You may not use this file except in compliance with the License.
  8. #
  9. # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10. # or http://www.opensolaris.org/os/licensing.
  11. # See the License for the specific language governing permissions
  12. # and limitations under the License.
  13. #
  14. # When distributing Covered Code, include this CDDL HEADER in each
  15. # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16. # If applicable, add the following below this CDDL HEADER, with the
  17. # fields enclosed by brackets "[]" replaced with your own identifying
  18. # information: Portions Copyright [yyyy] [name of copyright owner]
  19. #
  20. # CDDL HEADER END
  21. #
  22. #
  23. # Copyright 2009 Sun Microsystems, Inc. All rights reserved.
  24. # Use is subject to license terms.
  25. #
  26. #
  27. # Copyright (c) 2013, 2016 by Delphix. All rights reserved.
  28. #
  29. . $STF_SUITE/include/libtest.shlib
  30. . $STF_SUITE/tests/functional/reservation/reservation.shlib
  31. #
  32. # DESCRIPTION:
  33. #
  34. # For a sparse volume changes to the volsize are not reflected in the
  35. # reservation.
  36. #
  37. # STRATEGY:
  38. # 1) Create a regular and sparse volume
  39. # 2) Get the space available in the pool
  40. # 3) Set reservation with various sizes on the regular and sparse volumes
  41. # 4) Verify that the 'reservation' property for the regular volume has
  42. # the correct value.
  43. # 5) Verify that the 'reservation' property for the sparse volume is set to
  44. # 'none'
  45. #
  46. verify_runnable "global"
  47. function cleanup
  48. {
  49. typeset vol
  50. for vol in $regvol $sparsevol; do
  51. destroy_dataset $vol
  52. done
  53. }
  54. log_onexit cleanup
  55. log_assert "Verify that the volsize changes of sparse volumes are not " \
  56. "reflected in the reservation."
  57. log_onexit cleanup
  58. # Create a regular and sparse volume for testing.
  59. regvol=$TESTPOOL/$TESTVOL
  60. sparsevol=$TESTPOOL/$TESTVOL2
  61. log_must zfs create -V 64M $regvol
  62. log_must zfs create -s -V 64M $sparsevol
  63. typeset vsize=$(get_prop available $TESTPOOL)
  64. typeset iterate=10
  65. typeset regreserv
  66. typeset sparsereserv
  67. typeset volblocksize=$(get_prop volblocksize $regvol)
  68. typeset blknum=0
  69. typeset randomblknum
  70. ((blknum = vsize / volblocksize))
  71. while ((iterate > 1)); do
  72. ((randomblknum = 1 + RANDOM % blknum))
  73. # Make sure volsize is a multiple of volume block size
  74. ((vsize = randomblknum * volblocksize))
  75. log_must zfs set volsize=$vsize $regvol
  76. log_must zfs set volsize=$vsize $sparsevol
  77. vsize=$(volsize_to_reservation $regvol $vsize)
  78. regreserv=$(get_prop refreservation $regvol)
  79. sparsereserv=$(get_prop reservation $sparsevol)
  80. ((sparsereserv == vsize)) && \
  81. log_fail "volsize changes of sparse volume is reflected in " \
  82. "reservation (expected $vsize, got $sparsereserv)."
  83. ((regreserv != vsize)) && \
  84. log_fail "volsize changes of regular volume is not reflected " \
  85. "in reservation (expected $vsize, got $regreserv)."
  86. ((iterate = iterate - 1))
  87. done
  88. log_pass "The volsize changes of sparse volumes are not reflected in the " \
  89. "reservation"