xfstests: standard way of handling loop devices
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi,
I am currently working on tests that check FITRIM implementation (251, 260 and one new I'm writing now) and I want to use loopback device as fallback if $SCRATCH_DEV doesn't support discard. Has anybody been working on some xfstests' standard way of creating/destroying loop devices?
I could do with something as simple as this (in common.rc):
_create_loop_device()
{
size=${1}
dev=`losetup -f`
file="$TEST_DIR/$(basename $dev).fs"
truncate -s $size $file || _fail "Cannot create image file $file"
losetup $dev $file || _fail "Cannot associate $file with $dev"
echo $dev
}_destroy_loop_device()
{
dev=${1}
umount $dev 2>&1
file=`losetup -a | grep $dev | sed -n "s/.*(\(.*\))$/\1/p"`
losetup -d $dev && rm -f $file || _fail "Cannot destroy loop device"
}Do you think it's sufficient or do you have different opinion on handling this?
Thanks for comments!
Tomas
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 5 lines · Tomas Racek
Hi,
I am currently working on tests that check FITRIM implementation (251, 260 and one new I'm writing now) and I want to use loopback device as fallback if $SCRATCH_DEV doesn't support discard. Has anybody been working on some xfstests' standard way of creating/destroying loop devices?
I could do with something as simple as this (in common.rc):
Probably a good idea given the random failures we get with loopback device unmounting due to the racy unmount-based automatic device destruction.
Quoted 6 lines
_create_loop_device(){ size=${1} dev=`losetup -f` file="$TEST_DIR/$(basename $dev).fs"
That won't work - we create loop devices with files on the scratch device, too, and some tests create more than one. This is also racy in that two threads could both get then same next free loopback device, but I'm not sure we care about that case very much.
Quoted 1 line
truncate -s $size $file || _fail "Cannot create image file $file"
It's better to use xfs_io that introduce new external tool dependencies.
Quoted 8 lines
losetup $dev $file || _fail "Cannot associate $file with $dev" echo $dev }
_destroy_loop_device(){ dev=${1} umount $dev 2>&1
If unmount fails, what then?
Quoted 2 lines
file=`losetup -a | grep $dev | sed -n "s/.*(\(.*\))$/\1/p"`
losetup -d $dev && rm -f $file || _fail "Cannot destroy loop device"And if unmount destroys the loop device automatically? That will fail the test, right?
Also, what happens if we unmount the filesystem first so we can run consistency checks on the image before we destroy it?
I'd suggest that it is the test's responsibility to create, mount, unmount, check and destroy the image file as those vary from test to test. Hence a better idea is to just use an image path/device API. i.e:
_create_loop_device()
{
file=$1
dev=`losetup -f`
losetup $dev $file || _fail "Cannot associate $file with $dev"
echo $dev
}_destroy_loop_device()
{
dev=$1
losetup -d $dev || _fail "Cannot destroy loop device"
}Cheers,
Dave.
Signature · 7 lines
Dave Chinner [email protected] _______________________________________________ xfs mailing list [email protected] http://oss.sgi.com/mailman/listinfo/xfs
Quoted 16 lines · Tomas Racek
Quoted 9 lines
Hi,
I am currently working on tests that check FITRIM implementation (251, 260 and one new I'm writing now) and I want to use loopback device as fallback if $SCRATCH_DEV doesn't support discard. Has anybody been working on some xfstests' standard way of creating/destroying loop devices?
I could do with something as simple as this (in common.rc):
Probably a good idea given the random failures we get with loopback device unmounting due to the racy unmount-based automatic device destruction.
Quoted 1 line
Quoted 8 lines
Quoted 5 lines
_create_loop_device(){ size=${1} dev=`losetup -f` file="$TEST_DIR/$(basename $dev).fs"That won't work - we create loop devices with files on the scratch device, too, and some tests create more than one. This is also racy
I've missed that...
Quoted 8 lines
in that two threads could both get then same next free loopback device, but I'm not sure we care about that case very much.
Quoted 2 lines
truncate -s $size $file || _fail "Cannot create image file $file"It's better to use
xfs_iothat introduce new external tool dependencies.
OK.
Quoted 11 lines
Quoted 10 lines
losetup $dev $file || _fail "Cannot associate $file with $dev" echo $dev }
_destroy_loop_device(){ dev=${1} umount $dev 2>&1
Quoted 8 lines
If unmount fails, what then?
Quoted 3 lines
file=`losetup -a | grep $dev | sed -n "s/.*(\(.*\))$/\1/p"` losetup -d $dev && rm -f $file || _fail "Cannot destroy loop device"And if unmount destroys the loop device automatically? That will fail the test, right?
I wasn't aware of that. I've always used the two-step approach:
losetup /dev/loopX file
mount /dev/loopX mntpoint
and subsequent umount never destroyed loop device in my case. I tried to use only
mount file mntpoint
which then resulted in behaviour you described. Is this the rule or is some other magic in that?
Quoted 7 lines
Also, what happens if we unmount the filesystem first so we can run consistency checks on the image before we destroy it?
I'd suggest that it is the test's responsibility to create, mount, unmount, check and destroy the image file as those vary from test to test. Hence a better idea is to just use an image path/device API. i.e:
Thanks for useful comments, I appreciate that.
Tomas
Quoted 16 lines
_create_loop_device(){ file=$1 dev=`losetup -f` losetup $dev $file || _fail "Cannot associate $file with $dev" echo $dev }
_destroy_loop_device(){ dev=$1 losetup -d $dev || _fail "Cannot destroy loop device" }
Quoted 7 lines
Cheers,
Dave.
--
Dave Chinner
[email protected]
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs