fstests: fix group list generation for whacky test names
[xfstests-dev.git] / tests / ext4 / 053
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2021 Red Hat, Inc., Lukas Czerner <lczerner@redhat.com>.
4 #
5 # FS QA Test 053
6 #
7 # Sanity check of ext4 mount options
8 #
9 . ./common/preamble
10 _begin_fstest auto mount
11
12 seq=`basename $0`
13 seqres=$RESULT_DIR/$seq
14
15 here=`pwd`
16 tmp=/tmp/$$
17 status=1        # failure is the default!
18 trap "_cleanup; exit \$status" 0 1 2 3 15
19
20 _cleanup()
21 {
22         cd /
23         $UMOUNT_PROG $SCRATCH_MNT > /dev/null 2>&1
24         if [ -n "$LOOP_LOGDEV" ];then
25                 _destroy_loop_device $LOOP_LOGDEV 2>/dev/null
26         fi
27         rm -f $tmp.*
28 }
29
30 # get standard environment, filters and checks
31 . ./common/filter
32 . ./common/quota
33
34 # remove previous $seqres.full before test
35 rm -f $seqres.full
36
37 echo "Silence is golden."
38
39 SIZE=$((1024 * 1024))   # 1GB in KB
40 LOGSIZE=$((10 *1024))   # 10MB in KB
41
42 _supported_fs ext2 ext3 ext4
43 _require_scratch_size $SIZE
44 _require_quota
45 _require_loop
46 _require_command "$TUNE2FS_PROG" tune2fs
47 MKE2FS_PROG=$(type -P mke2fs)
48 _require_command "$MKE2FS_PROG" mke2fs
49 _require_kernel_config CONFIG_QFMT_V2
50
51 LOG=""
52 print_log() {
53         LOG="$LOG $@"
54 }
55
56 KERNEL_VERSION=`uname -r | cut -d'.' -f1,2`
57 KERNEL_MAJ=${KERNEL_VERSION%.*}
58 KERNEL_MIN=${KERNEL_VERSION#*.}
59
60 kernel_gte() {
61         major=${1%.*}
62         minor=${1#*.}
63
64         if [ $KERNEL_MAJ -gt $major ]; then
65                 return 0
66         elif [[ $KERNEL_MAJ -eq $major && $KERNEL_MIN -ge $minor ]]; then
67                 return 0
68         fi
69         return 1
70 }
71
72
73 # The aim here is to keep the mount options behaviour stable going forward
74 # so there is not much point in testing older kernels.
75 kernel_gte 5.12 || _notrun "This test is only relevant for kernel versions 5.12 and higher"
76
77 IGNORED="remount,defaults,ignored,removed"
78 CHECK_MINFO="lazytime,noatime,nodiratime,noexec,nosuid,ro"
79
80 # List of options that can't be used for remount even if the argument
81 # is not changed
82 CANT_REMOUNT="defaults,remount,abort,journal_path,journal_dev,usrjquota,grpjquota,jqfmt"
83 ERR=0
84
85 test_mnt() {
86         findmnt -n $SCRATCH_DEV > /dev/null 2>&1
87         [ $? -ne 0 ] && return $?
88
89         if [ $# -eq 1 ]; then
90                 OPTS=$1
91         elif [ $# -eq 2 ]; then
92                 OPTS=$2
93         else
94                 return 0
95         fi
96
97         print_log "checking \"$OPTS\" "
98         # test options in /proc/fs/ext4/dev/options
99         (
100         ret=0
101         IFS=','
102         for option in $OPTS; do
103                 if echo $IGNORED | grep -w $option; then
104                         continue
105                 fi
106
107                 [ $option = "noload" ] && option="norecovery"
108
109                 if [[ $option = ^* ]]; then
110                         expected=1
111                 else
112                         expected=0
113                 fi
114                 option=${option#^}
115
116                 if echo $CHECK_MINFO | grep -w $option; then
117                         findmnt -n -o OPTIONS $SCRATCH_DEV | grep $option
118                         ret=$?
119                 else
120                         grep $option /proc/fs/ext4/$(_short_dev $SCRATCH_DEV)/options
121                         ret=$?
122                 fi
123
124                 if [ $ret -ne $expected ]; then
125                         exit 1
126                 fi
127         done
128         ) > /dev/null 2>&1
129         return $?
130 }
131
132 fail() {
133         print_log "   FAILED"
134         ERR=$((ERR+1))
135         echo $LOG | tee -a $seqres.full
136         LOG=""
137 }
138
139 ok() {
140         print_log "   OK"
141         echo $LOG >> $seqres.full
142         LOG=""
143 }
144
145 simple_mount() {
146         _mount $* >> $seqres.full 2>&1
147 }
148
149 # $1 - can hold -n option, if it does argumetns are shifted
150 # $1 - options to test
151 # $2 - if provided it's the option string to check for
152 do_mnt() {
153         device=$SCRATCH_DEV
154         # If -n argument is provided do not specify $SCRATCH_DEV
155         # usefull for remount
156         if [ "$1" == "-n" ]; then
157                 unset device
158                 shift
159         fi
160
161         if [ -z "$1" ]; then
162                 simple_mount $device $SCRATCH_MNT
163                 ret=$?
164         else
165                 simple_mount -o $1 $device $SCRATCH_MNT
166                 ret=$?
167         fi
168         if [ $ret -eq 0 ]; then
169                 test_mnt $1 $2
170                 ret=$?
171                 [ $ret -ne 0 ] && print_log "(not found)"
172         else
173                 print_log "(failed mount)"
174         fi
175
176         if [ $ret -ne 0 ] || [ -z "$1" ]; then
177                 return $ret
178         fi
179
180         # Skip options that can't be remounted even if the argument
181         # is not changed
182         (
183         IFS=','
184         for option in $1; do
185                 opt=${option%=*}
186                 if echo $CANT_REMOUNT | grep -w $opt; then
187                         exit 1
188                 fi
189                 # Skip the remount if we have data=journal on ext3 because
190                 # it will set nodioread_nolock which is not supported on ext3
191                 # hence remount will fail. Yes it is broken.
192                 if [[ $fstype == "ext3" ]] && [[ $option == "data=journal" ]]; then
193                         exit 1
194                 fi
195         done
196         ) > /dev/null 2>&1
197         [ $? -eq 1 ] && return 0
198         print_log "(going to remount options $1)"
199
200         # Just remount with original mnt options, don't add anything at all
201         simple_mount -o remount,$1 $SCRATCH_MNT
202         ret=$?
203         if [ $ret -eq 0 ]; then
204                 test_mnt $1 $2
205                 ret=$?
206                 [ $ret -ne 0 ] && print_log "(not found after remount)"
207         else
208                 print_log "(failed remount)"
209         fi
210
211         [ $ret -ne 0 ] && return $ret
212
213         # Plain remount without specifying any mount options
214         simple_mount -o remount $SCRATCH_MNT
215         ret=$?
216         if [ $ret -eq 0 ]; then
217                 test_mnt $1 $2
218                 ret=$?
219                 [ $ret -ne 0 ] && print_log "(not found after plain remount)"
220         else
221                 print_log "(failed plain remount)"
222         fi
223
224         return $ret
225 }
226
227 # Test that mounting or remounting with the specified mount option(s) fails
228 # (meaning that the mount or remount fails, as opposed to the mount option(s)
229 # just being ignored).
230 not_mnt() {
231         # We don't need -t not not_ variant
232         if [ "$1" == "-t" ]; then
233                 shift
234         fi
235
236         print_log "SHOULD FAIL mounting $fstype \"$1\" "
237         if simple_mount -o $1 $SCRATCH_DEV $SCRATCH_MNT; then
238                 print_log "(mount unexpectedly succeeded)"
239                 fail
240                 $UMOUNT_PROG $SCRATCH_MNT
241                 return
242         fi
243         ok
244
245         if ! simple_mount $SCRATCH_DEV $SCRATCH_MNT; then
246                 print_log "(normal mount unexpectedly failed)"
247                 fail
248                 return
249         fi
250         not_remount $1
251         $UMOUNT_PROG $SCRATCH_MNT
252 }
253
254 mnt_only() {
255         print_log "mounting $fstype \"$1\" "
256         do_mnt $@
257         if [ $? -ne 0 ]; then
258                 fail
259         else
260                 ok
261         fi
262 }
263
264 mnt() {
265         # Do we need to run the tune2fs mount option test ?
266         t2fs=0
267         if [ "$1" == "-t" ]; then
268                 t2fs=1
269                 shift
270         fi
271
272         mnt_only $*
273         $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
274
275         [ "$t2fs" -eq 0 ] && return
276
277         op_set=$1
278         if [ $# -eq 1 ]; then
279                 check=$1
280         elif [ $# -eq 2 ]; then
281                 check=$2
282         else
283                 return 0
284         fi
285
286         # some options need translation for tune2fs
287         op_set=$(echo $op_set | sed -e 's/data=journal/journal_data/' \
288                                     -e 's/data=ordered/journal_data_ordered/' \
289                                     -e 's/data=writeback/journal_data_writeback/')
290         $TUNE2FS_PROG -o $op_set $SCRATCH_DEV > /dev/null 2>&1
291         mnt_only "defaults" $check
292         $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
293         if [ "$op_set" = ^* ]; then
294                 op_set=${op_set#^}
295         else
296                 op_set="^${op_set}"
297         fi
298         $TUNE2FS_PROG -o $op_set $SCRATCH_DEV > /dev/null 2>&1
299 }
300
301 # $1 - options to mount with
302 # $2 - options to remount with
303 remount() {
304         # First do this specifying both dev and mnt
305         print_log "mounting $fstype \"$1\" "
306         do_mnt $1
307         [ $? -ne 0 ] && fail && return
308         print_log "remounting \"$2\" "
309         do_mnt remount,$2 $3
310         if [ $? -ne 0 ]; then
311                 fail
312                 $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
313                 return
314         else
315                 ok
316         fi
317         $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
318
319         # Now just specify mnt
320         print_log "mounting $fstype \"$1\" "
321         do_mnt $1
322         [ $? -ne 0 ] && fail && return
323         print_log "remounting (MNT ONLY) \"$2\" "
324         do_mnt -n remount,$2 $3
325         if [ $? -ne 0 ]; then
326                 fail
327         else
328                 ok
329         fi
330
331         $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
332 }
333
334 # Test that the filesystem cannot be remounted with option(s) $1 (meaning that
335 # the remount fails, as opposed to the mount option(s) just being ignored).  The
336 # filesystem must already be mounted, and it is not unmounted afterwards.
337 not_remount() {
338         print_log "SHOULD FAIL remounting $fstype \"$1\" "
339         # Try specifying both dev and mnt.
340         if simple_mount -o remount,$1 $SCRATCH_DEV $SCRATCH_MNT; then
341                 print_log "(remount unexpectedly succeeded)"
342                 fail
343                 return
344         fi
345         ok
346
347         # Try specifying mnt only.
348         print_log "SHOULD FAIL remounting $fstype (MNT ONLY) \"$1\" "
349         if simple_mount -o remount,$1 $SCRATCH_MNT; then
350                 print_log "(remount unexpectedly succeeded)"
351                 fail
352                 return
353         fi
354         ok
355 }
356
357 # Mount the filesystem with option(s) $1, then test that it cannot be remounted
358 # with option(s) $2 (meaning that the remount fails, as opposed to the mount
359 # option(s) just being ignored).
360 mnt_then_not_remount() {
361         print_log "mounting $fstype \"$1\" "
362         if ! do_mnt $1; then
363                 fail
364                 return
365         fi
366         not_remount $2
367         $UMOUNT_PROG $SCRATCH_MNT
368 }
369
370
371 do_mkfs() {
372         $MKE2FS_PROG -T $fstype -Fq $* >> $seqres.full 2>&1 ||
373         _fail "mkfs failed - $MKFS_EXT4_PROG -Fq $* $SCRATCH_DEV"
374 }
375
376 not_ext2() {
377         if [[ $fstype == "ext2" ]]; then
378                 not_$*
379         else
380                 $*
381         fi
382 }
383
384 only_ext4() {
385         if [[ $fstype == "ext4" ]]; then
386                 $*
387         else
388                 not_$*
389         fi
390 }
391
392 # Create logdev for external journal
393 LOOP_IMG=$tmp.logdev
394 truncate -s ${LOGSIZE}k $LOOP_IMG
395 LOOP_LOGDEV=`_create_loop_device $LOOP_IMG`
396 majmin=`stat -c "%t:%T" $LOOP_LOGDEV`
397 LOGDEV_DEVNUM=`echo "${majmin%:*}*2^8 + ${majmin#*:}" | bc`
398
399 # Test all the extN file system supported by ext4 driver
400 fstype=
401 for fstype in ext2 ext3 ext4; do
402
403         $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
404         $UMOUNT_PROG $SCRATCH_DEV 2> /dev/null
405
406         do_mkfs $SCRATCH_DEV ${SIZE}k
407
408         # do we have fstype support ?
409         do_mnt
410         if [ $? -ne 0 ]; then
411                 print_log "$fstype not supported. Skipping..."
412                 ok
413                 continue
414         fi
415         if [ ! -f /proc/fs/ext4/$(_short_dev $SCRATCH_DEV)/options ]; then
416                 print_log "$fstype not supported. Skipping..."
417                 ok
418                 continue
419         fi
420
421         $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
422
423         not_mnt failme
424         mnt
425         mnt bsddf
426         mnt minixdf
427         mnt grpid
428         mnt -t bsdgroups grpid
429         mnt nogrpid
430         mnt sysvgroups nogrpid
431         mnt resgid=1001
432         mnt resuid=1001
433         mnt sb=131072
434         mnt errors=continue
435         mnt errors=panic
436         mnt errors=remount-ro
437         mnt nouid32
438         mnt debug
439         mnt oldalloc removed
440         mnt orlov removed
441         mnt -t user_xattr
442         mnt nouser_xattr
443
444         if _has_kernel_config CONFIG_EXT4_FS_POSIX_ACL; then
445                 mnt -t acl
446         else
447                 mnt -t acl ^acl
448         fi
449
450         not_ext2 mnt noload norecovery
451         mnt bh removed
452         mnt nobh removed
453         not_ext2 mnt commit=7
454         mnt min_batch_time=200
455         mnt max_batch_time=10000
456         only_ext4 mnt journal_checksum
457         only_ext4 mnt nojournal_checksum
458         only_ext4 mnt journal_async_commit,data=writeback
459         mnt abort ignored
460         not_ext2 mnt -t data=journal
461         not_ext2 mnt -t data=ordered
462         not_ext2 mnt -t data=writeback
463         not_ext2 mnt data_err=abort
464         not_ext2 mnt data_err=ignore ignored
465         mnt usrjquota=aquota.user,jqfmt=vfsv0
466         not_mnt usrjquota=aquota.user
467         mnt usrjquota= ignored
468         mnt grpjquota=aquota.group,jqfmt=vfsv0
469         not_mnt grpjquota=aquota.group
470         mnt grpjquota= ignored
471         mnt jqfmt=vfsold
472         mnt jqfmt=vfsv0
473         mnt jqfmt=vfsv1
474         mnt grpquota
475         mnt quota
476         mnt noquota
477         mnt usrquota
478         mnt grpquota
479         mnt barrier
480         mnt barrier=0 nobarrier
481         mnt barrier=1 barrier
482         mnt barrier=99 barrier
483         mnt -t nobarrier
484         mnt i_version
485         mnt stripe=512
486         only_ext4 mnt delalloc
487         only_ext4 mnt -t nodelalloc
488         mnt warn_on_error
489         mnt nowarn_on_error
490         not_mnt debug_want_extra_isize=512
491         mnt debug_want_extra_isize=32 ignored
492         mnt mblk_io_submit removed
493         mnt nomblk_io_submit removed
494         mnt -t block_validity
495         mnt noblock_validity
496         mnt inode_readahead_blks=16
497         not_ext2 mnt journal_ioprio=6 ignored
498         mnt auto_da_alloc=0 noauto_da_alloc
499         mnt auto_da_alloc=1 auto_da_alloc
500         mnt auto_da_alloc=95 auto_da_alloc
501         mnt auto_da_alloc
502         mnt noauto_da_alloc
503         only_ext4 mnt dioread_nolock
504         only_ext4 mnt nodioread_nolock
505         only_ext4 mnt dioread_lock nodioread_nolock
506         mnt -t discard
507         mnt nodiscard
508         mnt init_itable=20
509         mnt init_itable
510         mnt init_itable=0
511         mnt noinit_itable
512         mnt max_dir_size_kb=4096
513
514         if _has_kernel_config CONFIG_FS_ENCRYPTION; then
515                 mnt test_dummy_encryption
516                 mnt test_dummy_encryption=v1
517                 mnt test_dummy_encryption=v2
518                 not_mnt test_dummy_encryption=v3
519                 not_mnt test_dummy_encryption=
520         else
521                 mnt test_dummy_encryption ^test_dummy_encryption
522                 mnt test_dummy_encryption=v1 ^test_dummy_encryption=v1
523                 mnt test_dummy_encryption=v2 ^test_dummy_encryption=v2
524                 mnt test_dummy_encryption=v3 ^test_dummy_encryption=v3
525                 not_mnt test_dummy_encryption=
526         fi
527
528         if _has_kernel_config CONFIG_FS_ENCRYPTION_INLINE_CRYPT; then
529                 mnt inlinecrypt
530         else
531                 mnt inlinecrypt ^inlinecrypt
532         fi
533
534         mnt prefetch_block_bitmaps removed
535         mnt no_prefetch_block_bitmaps
536         # We don't currently have a way to know that the option has been
537         # applied, so comment it out for now. This should be fixed in the
538         # future.
539         #mnt mb_optimize_scan=0
540         #mnt mb_optimize_scan=1
541         #not_mnt mb_optimize_scan=9
542         #not_mnt mb_optimize_scan=
543         mnt nombcache
544         mnt no_mbcache nombcache
545         mnt check=none removed
546         mnt nocheck removed
547         mnt reservation removed
548         mnt noreservation removed
549         mnt journal=20 ignored
550         not_mnt nonsenseoption
551         not_mnt nonsenseoption=value
552
553         # generic mount options
554         mnt lazytime
555         mnt nolazytime ^lazytime
556         mnt noatime
557         mnt nodiratime
558         mnt noexec
559         mnt nosuid
560         mnt ro
561
562         # generic remount check
563         remount barrier nobarrier
564         remount nobarrier barrier
565         remount discard nodiscard
566         remount nodiscard discard
567
568         # dax mount options
569         simple_mount -o dax=always $SCRATCH_DEV $SCRATCH_MNT > /dev/null 2>&1
570         if [ $? -eq 0 ]; then
571                 $UMOUNT_PROG $SCRATCH_MNT 2> /dev/null
572                 mnt dax
573                 mnt dax=always
574                 mnt dax=never
575                 mnt dax=inode
576
577                 mnt_then_not_remount lazytime dax
578                 mnt_then_not_remount dax=always dax=never
579
580                 if [[ $fstype != "ext2" ]]; then
581                         mnt_then_not_remount data=journal dax
582                         mnt_then_not_remount data=journal dax=always
583                         mnt_then_not_remount data=journal dax=never
584                         mnt_then_not_remount data=journal dax=inode
585                 fi
586         fi
587
588         # Quota remount check
589         remount grpquota usrquota
590         remount usrquota quota
591         remount usrquota usrjquota=q.u,jqfmt=vfsv0
592         remount grpquota grpjquota=q.g,jqfmt=vfsv0
593
594         mnt_then_not_remount usrquota grpjquota=q.g,jqfmt=vfsv0
595         mnt_then_not_remount grpquota usrjquota=q.u,jqfmt=vfsv0
596
597         remount quota usrjquota=q.u,jqfmt=vfsv0
598         mnt_then_not_remount quota grpjquota=q.g,jqfmt=vfsv0
599
600         remount usrjquota=q.u,jqfmt=vfsv0 grpjquota=q.g
601         mnt_then_not_remount usrjquota=q.u,jqfmt=vfsv0 usrjquota=q.ua
602         mnt_then_not_remount grpjquota=q.g,jqfmt=vfsv0 grpjquota=q.ga
603
604         remount usrjquota=q.u,jqfmt=vfsv0 usrquota usrjquota=q.u,jqfmt=vfsv0
605         remount grpjquota=q.g,jqfmt=vfsv0 grpquota grpjquota=q.g,jqfmt=vfsv0
606         mnt_then_not_remount usrjquota=q.u,jqfmt=vfsv0 grpquota
607         mnt_then_not_remount grpjquota=q.g,jqfmt=vfsv0 usrquota
608
609         remount grpjquota=q.g,jqfmt=vfsv0 grpjquota= ^grpjquota=
610         remount usrjquota=q.u,jqfmt=vfsv0 usrjquota= ^usrjquota=
611         remount grpjquota=q.g,usrjquota=q.u,jqfmt=vfsv0 grpjquota=,usrjquota= ^grpjquota=,^usrjquota=
612
613         remount jqfmt=vfsv0 grpjquota=q.g
614         remount jqfmt=vfsv0 usrjquota=q.u
615
616         if [[ $fstype != "ext2" ]]; then
617                 remount noload data=journal norecovery
618                 mnt_then_not_remount data=journal data=ordered
619                 mnt_then_not_remount data=journal data=writeback
620                 mnt_then_not_remount data=ordered data=journal
621                 mnt_then_not_remount data=ordered data=writeback
622                 mnt_then_not_remount data=writeback data=journal
623                 mnt_then_not_remount data=writeback data=ordered
624         fi
625
626         do_mkfs -O journal_dev $LOOP_LOGDEV ${LOGSIZE}k
627         do_mkfs -J device=$LOOP_LOGDEV $SCRATCH_DEV ${SIZE}k
628         mnt defaults
629         mnt journal_path=$LOOP_LOGDEV ignored
630         mnt journal_dev=$LOGDEV_DEVNUM ignored
631         not_mnt journal_path=${LOOP_LOGDEV}_nonexistent
632         not_mnt journal_dev=123456
633         not_mnt journal_dev=999999999999999
634
635         do_mkfs -E quotatype=prjquota $SCRATCH_DEV ${SIZE}k
636         mnt prjquota
637
638         # test clearing/changing journalled quota when enabled
639         echo "== Testing active journalled quota" >> $seqres.full
640         mnt_only prjquota,grpjquota=aquota.group,usrjquota=aquota.user,jqfmt=vfsv0
641
642         # Prepare and enable quota
643         quotacheck -vugm $SCRATCH_MNT >> $seqres.full 2>&1
644         quotaon -vug $SCRATCH_MNT >> $seqres.full 2>&1
645
646         not_remount grpjquota=
647         not_remount usrjquota=aaquota.user
648         not_remount grpjquota=aaquota.group
649         not_remount jqfmt=vfsv1
650         not_remount noquota
651         mnt_only remount,usrquota,grpquota ^usrquota,^grpquota
652         $UMOUNT_PROG $SCRATCH_MNT > /dev/null 2>&1
653
654         # test clearing/changing quota when enabled
655         do_mkfs -E quotatype=^prjquota $SCRATCH_DEV ${SIZE}k
656         not_mnt prjquota
657         echo "== Testing active non-journalled quota" >> $seqres.full
658         mnt_only grpquota,usrquota
659
660         # Prepare and enable quota
661         quotacheck -vugm $SCRATCH_MNT >> $seqres.full 2>&1
662         quotaon -vug $SCRATCH_MNT >> $seqres.full 2>&1
663
664         not_remount noquota
665         not_remount usrjquota=aquota.user
666         not_remount grpjquota=aquota.group
667         not_remount jqfmt=vfsv1
668         mnt_only remount,grpjquota= grpquota,^grpjquota
669         mnt_only remount,usrjquota= usrquota,^usrjquota
670         mnt_only remount,usrquota,grpquota usrquota,grpquota
671         quotaoff -f $SCRATCH_MNT >> $seqres.full 2>&1
672         mnt_only remount,noquota ^usrquota,^grpquota,quota
673         $UMOUNT_PROG $SCRATCH_MNT > /dev/null 2>&1
674
675         # Quota feature
676         echo "== Testing quota feature " >> $seqres.full
677         do_mkfs -O quota -E quotatype=prjquota $SCRATCH_DEV ${SIZE}k
678         mnt usrjquota=aquota.user,jqfmt=vfsv0 ^usrjquota=
679         mnt grpjquota=aquota.user,jqfmt=vfsv0 ^grpjquota=
680         mnt jqfmt=vfsv1 ^jqfmt=
681         mnt prjquota
682         mnt usrquota
683         mnt grpquota
684         mnt_then_not_remount defaults usrjquota=aquota.user
685         mnt_then_not_remount defaults grpjquota=aquota.user
686         mnt_then_not_remount defaults jqfmt=vfsv1
687         remount defaults grpjquota=,usrjquota= ignored
688
689 done #for fstype in ext2 ext3 ext4; do
690
691 $UMOUNT_PROG $SCRATCH_MNT > /dev/null 2>&1
692 echo "$ERR errors encountered" >> $seqres.full
693
694 status=$ERR
695 exit