1 #!/usr/bin/bash -p
   2 #
   3 # This file and its contents are supplied under the terms of the
   4 # Common Development and Distribution License ("CDDL"), version 1.0.
   5 # You may only use this file in accordance with the terms of version
   6 # 1.0 of the CDDL.
   7 #
   8 # A full copy of the text of the CDDL should have accompanied this
   9 # source.  A copy of the CDDL is also available via the Internet at
  10 # http://www.illumos.org/license/CDDL.
  11 #
  12 
  13 #
  14 # Copyright 2018 Joyent, Inc.
  15 #
  16 
  17 . $STF_SUITE/include/libtest.shlib
  18 . $STF_SUITE/tests/functional/reservation/reservation.shlib
  19 
  20 #
  21 # DESCRIPTION:
  22 #
  23 # The use of refreservation=auto on a filesystem does not change the
  24 # refreservation and results in an error.
  25 #
  26 # STRATEGY:
  27 # 1) Create a filesystem
  28 # 2) Verify that zfs set refreservation=auto fails without changing
  29 # refreservation from none.
  30 # 3) Set refreservation to a valid value.
  31 # 4) Verify that zfs set refreservation=auto fails without changing
  32 # refreservation from the previous value.
  33 #
  34 
  35 verify_runnable "both"
  36 
  37 fs=$TESTPOOL/$TESTFS/$(basename $0).$$
  38 
  39 function cleanup
  40 {
  41         if datasetexists "$fs"; then
  42                 log_must zfs destroy -f "$fs"
  43         fi
  44 }
  45 
  46 log_onexit cleanup
  47 
  48 log_assert "refreservation=auto on a filesystem generates an error without" \
  49         "changing refreservation"
  50 
  51 space_avail=$(get_prop available $TESTPOOL)
  52 (( fs_size = space_avail / 4 ))
  53 
  54 # Create a filesystem with no refreservation
  55 log_must zfs create $fs
  56 resv=$(get_prop refreservation $fs)
  57 log_must test $resv -eq 0
  58 
  59 # Verify that refreservation=auto fails without altering refreservation
  60 log_mustnot zfs set refreservation=auto $fs
  61 resv=$(get_prop refreservation $fs)
  62 log_must test $resv -eq 0
  63 
  64 # Set refreservation and verify
  65 log_must zfs set refreservation=$fs_size $fs
  66 resv=$(get_prop refreservation $fs)
  67 log_must test $resv -eq $fs_size
  68 
  69 # Verify that refreservation=auto fails without altering refreservation
  70 log_mustnot zfs set refreservation=auto $fs
  71 resv=$(get_prop refreservation $fs)
  72 log_must test $resv -eq $fs_size
  73 
  74 log_pass "refreservation=auto does not work on filesystems, as expected"