Whamcloud - gitweb
LU-12687 osc: consume grants for direct I/O
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 5c86ba9..5821ef5 100644 (file)
@@ -71,7 +71,7 @@ gen_config() {
        # and stop to generate the startup logs.
        start_mds
        start_ost
-        wait_osc_import_state mds ost FULL
+       wait_osc_import_state mds ost FULL
        stop_ost
        stop_mds
 }
@@ -95,7 +95,7 @@ writeconf_or_reformat() {
 }
 
 reformat() {
-        formatall
+       formatall
 }
 
 start_mgs () {
@@ -140,6 +140,9 @@ start_mds() {
        for num in $(seq $MDSCOUNT); do
                start_mdt $num $@ || return 94
        done
+       for num in $(seq $MDSCOUNT); do
+               wait_clients_import_state ${CLIENTS:-$HOSTNAME} mds${num} FULL
+       done
 }
 
 start_mgsmds() {
@@ -157,14 +160,15 @@ stop_mds() {
 }
 
 stop_mgs() {
-       echo "stop mgs service on `facet_active_host mgs`"
-       # These tests all use non-failover stop
-       stop mgs -f  || return 97
+       echo "stop mgs service on `facet_active_host mgs`"
+       # These tests all use non-failover stop
+       stop mgs -f  || return 97
 }
 
 start_ost() {
        echo "start ost1 service on `facet_active_host ost1`"
        start ost1 $(ostdevname 1) $OST_MOUNT_OPTS $@ || return 95
+       wait_clients_import_state ${CLIENTS:-$HOSTNAME} ost1 FULL
 }
 
 stop_ost() {
@@ -176,6 +180,7 @@ stop_ost() {
 start_ost2() {
        echo "start ost2 service on `facet_active_host ost2`"
        start ost2 $(ostdevname 2) $OST_MOUNT_OPTS $@ || return 92
+       wait_clients_import_state ${CLIENTS:-$HOSTNAME} ost2 FULL
 }
 
 stop_ost2() {
@@ -254,8 +259,8 @@ check_mount() {
        do_facet client "cp /etc/passwd $DIR/a" || return 71
        do_facet client "rm $DIR/a" || return 72
        # make sure lustre is actually mounted (touch will block,
-        # but grep won't, so do it after)
-        do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73
+       # but grep won't, so do it after)
+       do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73
        echo "setup single mount lustre success"
 }
 
@@ -1681,6 +1686,7 @@ t32_test() {
        local writeconf=$2
        local dne_upgrade=${dne_upgrade:-"no"}
        local dom_upgrade=${dom_upgrade:-"no"}
+       local project_upgrade=${project_upgrade:-"no"}
        local ff_convert=${ff_convert:-"no"}
        local shall_cleanup_mdt=false
        local shall_cleanup_mdt1=false
@@ -1777,6 +1783,16 @@ t32_test() {
                                error_noexit "import zfs pool failed"
                                return 1
                        }
+       elif [ "$project_upgrade" != "no" ]; then
+               ! $r tune2fs -O project $mdt_dev &&
+                       error_noexit "enable project on mdt0 failed" &&
+                               return 1
+               $mdt2_is_available && ! $r tune2fs "-O project" $mdt2_dev &&
+                       error_noexit "enable project on mdt failed" &&
+                               return 1
+               ! $r tune2fs -O project $ost_dev &&
+                       error_noexit "enable project on mdt failed" &&
+                               return 1
        fi
 
        $r $LCTL set_param debug="$PTLDEBUG"
@@ -2342,6 +2358,13 @@ t32_test() {
                        return 1
                }
 
+               if [ "$mds1_FSTYPE" == ldiskfs -a \
+                   "$project_upgrade" != "no" ]; then
+                       ! $LFS project -d -p 1 $tmp/mnt/lustre/* &&
+                               error_noexit "set project failed" &&
+                                       return 1
+               fi
+
                [[ $(do_facet mds1 pgrep orph_.*-MDD | wc -l) == 0 ]] ||
                        error "MDD orphan cleanup thread not quit"
 
@@ -2468,12 +2491,17 @@ test_32d() {
 
        t32_check
        for tarball in $tarballs; do
-               banner "testing $tarball upgrade with ff convert"
-               ff_convert=yes t32_test $tarball || rc=$?
+               banner "testing $tarball upgrade with ff convert and project upgrade"
+               project_upgrade="no"
+               [[ "$MDS1_VERSION" -ge $(version_code 2.13.54) ]] &&
+                       [[ "$tarball" =~ "disk2_4-ldiskfs" ]] &&
+                               project_upgrade="yes"
+               project_upgrade=$project_upgrade ff_convert=yes t32_test \
+                       $tarball || rc=$?
        done
        return $rc
 }
-run_test 32d "convert ff test"
+run_test 32d "convert ff and project quota upgrade test"
 
 test_32e() {
        [[ "$MDS1_VERSION" -ge $(version_code 2.10.56) ]] ||
@@ -4680,6 +4708,10 @@ test_63() {
                skip "ldiskfs module has not been loaded"
        fi
 
+       if grep -q "CONFIG_DEBUG_LOCK_ALLOC=y" /boot/config-$(uname -r); then
+               skip "test is not compatible with CONFIG_DEBUG_LOCK_ALLOC=y"
+       fi
+
        echo "$inode_slab ldiskfs inodes per page"
        [ "${inode_slab%.*}" -ge "3" ] && return 0
 
@@ -6660,10 +6692,41 @@ test_90b() {
 }
 run_test 90b "check max_mod_rpcs_in_flight is enforced after update"
 
+save_params_90c() {
+       # get max_rpcs_in_flight value
+       mrif_90c=$($LCTL get_param -n \
+                  mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight)
+       echo "max_rpcs_in_flight is $mrif_90c"
+
+       # get max_mod_rpcs_in_flight value
+       mmrif_90c=$($LCTL get_param -n \
+                   mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight)
+       echo "max_mod_rpcs_in_flight is $mmrif_90c"
+
+       # get MDT max_mod_rpcs_per_client value
+       mmrpc_90c=$(do_facet mds1 \
+                   cat /sys/module/mdt/parameters/max_mod_rpcs_per_client)
+       echo "max_mod_rpcs_per_client is $mmrpc_90c"
+}
+
+restore_params_90c() {
+       trap 0
+
+       # restore max_rpcs_in_flight value
+       do_facet mgs $LCTL set_param -P \
+               mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$mrif_90c
+
+       # restore max_mod_rpcs_in_flight value
+       do_facet mgs $LCTL set_param -P \
+               mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mmrif_90c
+
+       # restore MDT max_mod_rpcs_per_client value
+       do_facet mds1 "echo $mmrpc_90c > \
+                      /sys/module/mdt/parameters/max_mod_rpcs_per_client"
+}
+
 test_90c() {
        local tmp
-       local mrif
-       local mmrpc
 
        setup
 
@@ -6679,42 +6742,64 @@ test_90c() {
                skip "Client not able to send multiple modify RPCs in parallel"
        fi
 
-       # get max_rpcs_in_flight value
-       mrif=$($LCTL get_param -n mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight)
-       echo "max_rpcs_in_flight is $mrif"
-
-       # get MDT max_mod_rpcs_per_client
-       mmrpc=$(do_facet mds1 \
-                   cat /sys/module/mdt/parameters/max_mod_rpcs_per_client)
-       echo "max_mod_rpcs_per_client is $mmrpc"
+       save_params_90c
+       stack_trap restore_params_90c
 
        # testcase 1
        # attempt to set max_mod_rpcs_in_flight to max_rpcs_in_flight value
        # prerequisite: set max_mod_rpcs_per_client to max_rpcs_in_flight value
-       umount_client $MOUNT
-       do_facet mds1 \
-               "echo $mrif > /sys/module/mdt/parameters/max_mod_rpcs_per_client"
-       mount_client $MOUNT
+       do_facet mds1 "echo $mrif_90c > \
+                      /sys/module/mdt/parameters/max_mod_rpcs_per_client"
 
-       $LCTL set_param \
-           mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mrif &&
-           error "set max_mod_rpcs_in_flight to $mrif should fail"
+       # if max_mod_rpcs_in_flight is set to be equal to or larger than
+       # max_rpcs_in_flight, then max_rpcs_in_flight will be increased
+       if [[ "$CLIENT_VERSION" -ge $(version_code 2.13.53) ]]; then
+               $LCTL set_param \
+               mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mrif_90c ||
+                       error "set max_mod_rpcs_in_flight to $mrif_90c failed"
+
+               local new_mrif=$($LCTL get_param -n \
+                                mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight)
+               ((new_mrif == mrif_90c + 1)) ||
+                       error "max_rpcs_in_flight was not increased"
+       fi
 
        umount_client $MOUNT
-       do_facet mds1 \
-               "echo $mmrpc > /sys/module/mdt/parameters/max_mod_rpcs_per_client"
+       do_facet mds1 "echo $mmrpc_90c > \
+                      /sys/module/mdt/parameters/max_mod_rpcs_per_client"
        mount_client $MOUNT
 
        # testcase 2
        # attempt to set max_mod_rpcs_in_flight to max_mod_rpcs_per_client+1
        # prerequisite: set max_rpcs_in_flight to max_mod_rpcs_per_client+2
        $LCTL set_param \
-           mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$((mmrpc + 2))
+               mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$((mmrpc_90c + 2))
 
        $LCTL set_param \
-           mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$((mmrpc + 1)) &&
-           error "set max_mod_rpcs_in_flight to $((mmrpc + 1)) should fail"
+       mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$((mmrpc_90c + 1)) &&
+       error "set max_mod_rpcs_in_flight to $((mmrpc_90c + 1)) should fail"
+
+       # testcase 3
+       # attempt to set max_mod_rpcs_in_flight permanently
+       do_facet mgs $LCTL set_param -P \
+               mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$mrif_90c
+
+       do_facet mgs $LCTL set_param -P \
+               mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mrif_90c
+
+       remount_client $MOUNT
+
+       wait_update_facet --verbose client "$LCTL get_param -n \
+               mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight" \
+               "$((mrif_90c + 1))" ||
+               error "expected '$((mrif_90c + 1))' for max_rpcs_in_flight"
 
+       wait_update_facet --verbose client "$LCTL get_param -n \
+               mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight" \
+               "$mrif_90c" ||
+               error "expected '$mrif_90c' for max_mod_rpcs_in_flight"
+
+       restore_params_90c
        cleanup
 }
 run_test 90c "check max_mod_rpcs_in_flight update limits"
@@ -8691,6 +8776,55 @@ test_123ae() { # LU-11566
 }
 run_test 123ae "llog_cancel can cancel requested record"
 
+test_123af() { #LU-13609
+       [ "$MGS_VERSION" -ge $(version_code 2.13.54) -a \
+          "$MDS1_VERSION" -ge $(version_code 2.13.54) ] ||
+               skip "Need both MGS and MDS version at least 2.13.54"
+
+       [ -d $MOUNT/.lustre ] || setupall
+       stack_trap "do_facet mds1 $LCTL set_param fail_loc=0" EXIT
+
+       local device
+       local facet
+       local cmd
+       local orig_clist
+       local orig_count
+       local new_clist
+       local new_count
+
+       for device in "MGS" "$FSNAME-MDT0000"; do
+               cmd="--device $device llog_catlist"
+               echo "lctl $cmd ..."
+               if [ "$device" = "MGS" ]; then
+                       facet="mgs"
+               else
+                       facet="mds1"
+               fi
+               orig_clist=($(do_facet $facet $LCTL $cmd | awk '{ print $2 }'))
+               orig_count=${#orig_clist[@]}
+               echo "orig_clist: ${orig_clist[@]}"
+
+               #define OBD_FAIL_CATLIST 0x131b
+               #fetch to llog records from the second one
+               do_facet $facet $LCTL set_param fail_loc=0x131b fail_val=2
+
+               new_clist=($(do_facet $facet $LCTL $cmd | awk '{ print $2 }'))
+               new_count=${#new_clist[@]}
+               echo "new_clist: ${new_clist[@]}"
+
+               [ $new_count -eq $((orig_count - 1)) ] ||
+                       error "$new_count != $orig_count - 1"
+               for i in $(seq 0 $new_count); do
+                       j=$((i + 1))
+                       [ "${orig_clist[$j]}" = "${new_clist[$i]}" ] ||
+                               error "${orig_clist[$j]} != ${new_clist[$i]}"
+               done
+               do_facet mds1 $LCTL set_param fail_loc=0
+               echo "done"
+       done
+}
+run_test 123af "llog_catlist can show all config files correctly"
+
 test_123F() {
        remote_mgs_nodsh && skip "remote MGS with nodsh"
 
@@ -8906,6 +9040,53 @@ test_125()
 }
 run_test 125 "check l_tunedisk only tunes OSTs and their slave devices"
 
+test_126() {
+       [[ "$MDS1_VERSION" -ge $(version_code 2.13.52) ]] ||
+               skip "Need MDS version at least 2.13.52"
+
+       cleanup
+       do_rpc_nodes $(facet_active_host $SINGLEMDS) load_module ../libcfs/libcfs/libcfs
+       #define OBD_FAIL_OBD_SETUP 0x60d
+       do_facet mds1 $LCTL set_param fail_loc=0x60d
+       do_rpc_nodes $(facet_active_host $SINGLEMDS) load_modules &
+       for i in {1..40}; do
+               do_facet mds1 lsmod | grep -q osd_$mds1_FSTYPE && break
+               sleep 1
+       done
+       clear_failloc $SINGLEMDS 20 &
+       start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS
+}
+run_test 126 "mount in parallel shouldn't cause a crash"
+
+test_127() {
+       [[ "$ost1_FSTYPE" == ldiskfs ]] || skip "ldiskfs only test"
+
+       cleanup
+       setup
+       zconf_umount_clients $RCLIENTS $MOUNT
+
+       wait_osp_active ost ${FSNAME}-OST0000 0 1
+       local osc_tgt="$FSNAME-OST0000-osc-$($LFS getname -i $DIR)"
+       local avail1=($($LCTL get_param -n osc.${osc_tgt}.kbytesavail))
+
+       $LFS setstripe -i 0 $DIR/$tfile || error "failed creating $DIR/$tfile"
+       dd if=/dev/zero of=$DIR/$tfile bs=1M oflag=direct || true
+
+       local avail2=($($LCTL get_param -n osc.${osc_tgt}.kbytesavail))
+
+       if ((avail2 * 100 / avail1 > 1)); then
+               lfs df $DIR
+               ls -l $DIR/$tfile
+               error "more than 1% space left: before=$avail1 after=$avail2"
+       fi
+
+       local mbs=$(($(stat -c %s $DIR/$tfile) / (1024 * 1024)))
+
+       dd if=/dev/zero of=$DIR/$tfile bs=1M count=$mbs conv=notrunc \
+               oflag=direct || error "overwrite failed"
+}
+run_test 127 "direct io overwrite on full ost"
+
 if ! combined_mgs_mds ; then
        stop mgs
 fi