xfstests: add test 200, exercise read-only block devices and mounts
PATCH 1/1 xfstests: add test 200, exercise read-only block devices and mounts
Make sure we do the right thing with blockdevices with a hard read-only flag.
200 new file +120 -0
@@ -0,0 +1,120 @@ +#! /bin/sh +# FS QA Test No. 200 +# +# Check out various mount/remount/unmount scenarious on a read-only blockdev. +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Christoph Hellwig. +#----------------------------------------------------------------------- +# +# creator [email protected] + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +_filter_scratch() +{ + sed -e "s,$SCRATCH_DEV,SCRATCH_DEV,g" | \ + sed -e "s,$SCRATCH_MNT,SCRATCH_MNT,g" +} + +_cleanup() +{ + cd / + blockdev --setrw $SCRATCH_DEV +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_require_scratch + +_scratch_mkfs_xfs >/dev/null 2>&1 + +# +# Mark the device read-only +# +echo "setting device read-only" +blockdev --setro $SCRATCH_DEV + +# +# Mount it, and make sure we can't write to it, and we can unmount it again +# +echo "mounting read-only block device:" +_scratch_mount 2>&1 | _filter_scratch + +echo "touching file on read-only filesystem (should fail)" +touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch + +# +# Apparently this used to be broken at some point: +# http://oss.sgi.com/bugzilla/show_bug.cgi?id=807 +# +echo "unmounting read-only filesystem" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +echo "setting device read-write" +blockdev --setrw $SCRATCH_DEV + +echo "mounting read-write block device:" +_scratch_mount 2>&1 | _filter_scratch + +echo "touch files" +touch $SCRATCH_MNT/{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9} + +echo "going down:" +src/godown -f $SCRATCH_MNT + +echo "unmounting shutdown filesystem:" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +echo "setting device read-only" +blockdev --setro $SCRATCH_DEV + +# +# Mounting a filesystem that requires log-recovery fails unless +# -o norecovery is used. +# +echo "mounting filesystem that needs recovery on a read-only device:" +_scratch_mount 2>&1 | _filter_scratch + +echo "unmounting read-only filesystem" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +# +# This is the way out if the underlying device really is read-only. +# Doesn't mean it's a good idea in practive, more a last resort +# data recovery hack. +# +echo "mounting filesystem with -o norecovery on a read-only device:" +_scratch_mount -o norecovery 2>&1 | _filter_scratch + +echo "unmounting read-only filesystem" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +echo "setting device read-write" +blockdev --setrw $SCRATCH_DEV + +# +# But log recovery is performed when mount with -o ro as long as +# the underlying device is not write protected. +# +echo "mounting filesystem that needs recovery with -o ro:" +_scratch_mount -o ro 2>&1 | _filter_scratch + + +# success, all done +echo "*** done" +rm -f $seq.full +status=0
200.out new file +24 -0
@@ -0,0 +1,24 @@ +QA output created by 200 +setting device read-only +mounting read-only block device: +mount: block device SCRATCH_DEV is write-protected, mounting read-only +touching file on read-only filesystem (should fail) +touch: cannot touch `SCRATCH_MNT/foo': Read-only file system +unmounting read-only filesystem +setting device read-write +mounting read-write block device: +touch files +going down: +unmounting shutdown filesystem: +setting device read-only +mounting filesystem that needs recovery on a read-only device: +mount: block device SCRATCH_DEV is write-protected, mounting read-only +mount: cannot mount block device SCRATCH_DEV read-only +unmounting read-only filesystem +umount: SCRATCH_MNT: not mounted +mounting filesystem with -o norecovery on a read-only device: +mount: block device SCRATCH_DEV is write-protected, mounting read-only +unmounting read-only filesystem +setting device read-write +mounting filesystem that needs recovery with -o ro: +*** done
group +1 -0
@@ -301,3 +301,4 @@ 196 quota auto 197 dir auto 199 mount auto +200 mount auto
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 2 lines · Christoph Hellwig
Make sure we do the right thing with blockdevices with a hard read-only flag.
Looks good to me.
Quoted 167 lines
Signed-off-by Christoph Hellwig <[email protected]>Index: xfstests-dev/200
===================================================================200 new file +120
-0@@ -0,0 +1,120 @@ +#! /bin/sh +# FS QA Test No. 200 +# +# Check out various mount/remount/unmount scenarious on a read-only blockdev. +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Christoph Hellwig. +#----------------------------------------------------------------------- +# +# creator [email protected] + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +_filter_scratch() +{ + sed -e "s,$SCRATCH_DEV,SCRATCH_DEV,g" | \ + sed -e "s,$SCRATCH_MNT,SCRATCH_MNT,g" +} + +_cleanup() +{ + cd / + blockdev --setrw $SCRATCH_DEV +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_require_scratch + +_scratch_mkfs_xfs >/dev/null 2>&1 + +# +# Mark the device read-only +# +echo "setting device read-only" +blockdev --setro $SCRATCH_DEV + +# +# Mount it, and make sure we can't write to it, and we can unmount it again +# +echo "mounting read-only block device:" +_scratch_mount 2>&1 | _filter_scratch + +echo "touching file on read-only filesystem (should fail)" +touch $SCRATCH_MNT/foo 2>&1 | _filter_scratch + +# +# Apparently this used to be broken at some point: +# http://oss.sgi.com/bugzilla/show_bug.cgi?id=807 +# +echo "unmounting read-only filesystem" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +echo "setting device read-write" +blockdev --setrw $SCRATCH_DEV + +echo "mounting read-write block device:" +_scratch_mount 2>&1 | _filter_scratch + +echo "touch files" +touch $SCRATCH_MNT/{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9} + +echo "going down:" +src/godown -f $SCRATCH_MNT + +echo "unmounting shutdown filesystem:" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +echo "setting device read-only" +blockdev --setro $SCRATCH_DEV + +# +# Mounting a filesystem that requires log-recovery fails unless +# -o norecovery is used. +# +echo "mounting filesystem that needs recovery on a read-only device:" +_scratch_mount 2>&1 | _filter_scratch + +echo "unmounting read-only filesystem" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +# +# This is the way out if the underlying device really is read-only. +# Doesn't mean it's a good idea in practive, more a last resort +# data recovery hack. +# +echo "mounting filesystem with -o norecovery on a read-only device:" +_scratch_mount -o norecovery 2>&1 | _filter_scratch + +echo "unmounting read-only filesystem" +umount $SCRATCH_MNT 2>&1 | _filter_scratch + +echo "setting device read-write" +blockdev --setrw $SCRATCH_DEV + +# +# But log recovery is performed when mount with -o ro as long as +# the underlying device is not write protected. +# +echo "mounting filesystem that needs recovery with -o ro:" +_scratch_mount -o ro 2>&1 | _filter_scratch + + +# success, all done +echo "*** done" +rm -f $seq.full +status=0Index: xfstests-dev/200.out
===================================================================200.out new file +24
-0@@ -0,0 +1,24 @@ +QA output created by 200 +setting device read-only +mounting read-only block device: +mount: block device SCRATCH_DEV is write-protected, mounting read-only +touching file on read-only filesystem (should fail) +touch: cannot touch `SCRATCH_MNT/foo': Read-only file system +unmounting read-only filesystem +setting device read-write +mounting read-write block device: +touch files +going down: +unmounting shutdown filesystem: +setting device read-only +mounting filesystem that needs recovery on a read-only device: +mount: block device SCRATCH_DEV is write-protected, mounting read-only +mount: cannot mount block device SCRATCH_DEV read-only +unmounting read-only filesystem +umount: SCRATCH_MNT: not mounted +mounting filesystem with -o norecovery on a read-only device: +mount: block device SCRATCH_DEV is write-protected, mounting read-only +unmounting read-only filesystem +setting device read-write +mounting filesystem that needs recovery with -o ro: +*** doneIndex: xfstests-dev/group
===================================================================group +1
-0@@ -301,3 +301,4 @@ 196 quota auto 197 dir auto 199 mount auto +200 mount auto
Quoted 5 lines
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs