4 # Test remount behaviour
5 # Initial motivation was for pv#985710 and pv#983964
7 #-----------------------------------------------------------------------
8 # Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved.
10 # This program is free software; you can redistribute it and/or
11 # modify it under the terms of the GNU General Public License as
12 # published by the Free Software Foundation.
14 # This program is distributed in the hope that it would be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write the Free Software Foundation,
21 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 #-----------------------------------------------------------------------
29 echo "QA output created by $seq"
33 status=1 # failure is the default!
34 trap "_cleanup; exit \$status" 0 1 2 3 15
35 tag="added by qa $seq"
40 umount $SCRATCH_MNT 2>/dev/null
41 _putback_scratch_fstab
47 sed -e "s#$SCRATCH_DEV#SCRATCH_DEV#" \
48 -e "s#$SCRATCH_MNT#SCRATCH_MNT#"
53 # assumes that we don't have extra ops in fstab
54 _mount | grep $SCRATCH_MNT | _scratch_filter
58 # mount(8) adds all options from mtab and fstab to the mount command
59 # line. So the filesystem either must not reject any option at all
60 # if it can't change it, or compare the value on the command line
61 # to the existing state and only reject it if it would change
62 # something that can't be changed.
64 # Test this behaviour by mounting a filesystem read-only with a non-
65 # default option and then try to remount it rw.
67 # note that mount(8) doesn't add the options when specifying both the
68 # device node and mount point, so test out the various mounting
73 # use filestreams as a hopefully never default option
75 echo "try remount ro,filestreams -> rw,filestreams"
77 _scratch_mount -o ro,filestreams
78 [ $? -eq 0 ] || echo "ro,filestreams mount failed unexpectedly"
81 for dev_mnt in $SCRATCH_DEV $SCRATCH_MNT "$SCRATCH_DEV $SCRATCH_MNT"; do
82 echo "mounting given: $dev_mnt" | _scratch_filter
83 _mount -o remount,rw $dev_mnt
84 [ $? -eq 0 ] || echo "remount rw failed"
91 echo "try remount ro,noattr2 -> rw,attr2"
93 _scratch_mount -o ro,noattr2
94 [ $? -eq 0 ] || echo "ro,noattr2 mount failed unexpectedly"
97 for dev_mnt in $SCRATCH_DEV $SCRATCH_MNT "$SCRATCH_DEV $SCRATCH_MNT"; do
98 echo "mounting given: $dev_mnt" | _scratch_filter
99 _mount -o remount,rw,attr2 $dev_mnt
100 [ $? -eq 0 ] || echo "remount rw,attr2 failed"
108 # make sure we really can write to a filesystem after remount,rw
110 _test_remount_write()
113 echo "try touching file after remount ro -> rw with options"
116 [ $? -eq 0 ] || echo "mount (1) failed unexpectedly"
118 touch $SCRATCH_MNT/foobar
119 [ $? -eq 0 ] || echo "touch (1) failed unexpectedly"
124 [ $? -eq 0 ] || echo "mount (2) failed unexpectedly"
126 _mount -o remount,rw,filestreams $SCRATCH_MNT
127 [ $? -eq 0 ] || echo "remount failed unexpectedly"
129 touch $SCRATCH_MNT/foobar
130 [ $? -eq 0 ] || echo "touch (2) failed unexpectedly"
136 # barrier is the only option we can change besides ro<->rw which is partially
137 # handled by the VFS and tested elsewhere. Make sure mount accepts going
138 # from barrier (which also is the default) to nobarrier and back.
140 _test_remount_barrier()
143 echo "Do remount barrier tests"
146 # mention barrier explicitly even if it's currently the default just to be sure
147 _scratch_mount -o barrier
148 [ $? -eq 0 ] || echo "mount failed unexpectedly!"
151 _scratch_mount -o remount,nobarrier
152 [ $? -eq 0 ] || _fail "remount nobarrier failed"
155 _scratch_mount -o remount,barrier
156 [ $? -eq 0 ] || _fail "remount barrier failed"
164 # Example fstab entry
165 # /dev/sdb2 /mnt/scratch1 xfs defaults 0 0
169 # comment out any existing SCRATCH_DEV
170 $SED_PROG -i "s;$SCRATCH_DEV;#$SCRATCH_DEV;" /etc/fstab
172 # add our fstab entry
173 echo "$SCRATCH_DEV $SCRATCH_MNT xfs defaults 0 0 # $tag" >> /etc/fstab
176 _modify_scratch_fstab()
180 # modify our fstab entry that we added
181 # modify opts by looking for last word which has non-space chars
182 $SED_PROG -i "s; [^ ]* 0 0 # $tag; $opts 0 0 # $tag;" /etc/fstab
185 _putback_scratch_fstab()
187 # uncomment out any existing SCRATCH_DEV
188 $SED_PROG -i "s;#$SCRATCH_DEV;$SCRATCH_DEV;" /etc/fstab
190 # remove the one we added at the end
191 $SED_PROG -i "/# $tag/d" /etc/fstab
194 # get standard environment, filters and checks
198 # real QA test starts here
208 _scratch_mkfs_xfs | _filter_mkfs 2>/dev/null
215 echo "add noikeep to fstab for scratch"
216 _modify_scratch_fstab noikeep # noikeep is not default for non dmapi
219 _putback_scratch_fstab
220 _test_remount_barrier