mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
078: xfs_repair should be run against the losetup'd device, not the image file
When running test 078 against a 4k logical block sized disk, it fails in xfs_repair. The problem is that xfs_repair is passed the loopback filename instead of the actual loop device. This means that it opens the file O_DIRECT, and tries to do 512 byte aligned I/O to a 4k sector device. The loop device, for better or for worse, will do buffered I/O, and thus does not suffer from the same problem. So, the attached patch sets up the loop device and passes that to xfs_repair. This resolves the issue on my test system. Comments are more than welcome. Signed-off-by: Jeff Moyer <jmoyer@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
committed by
Christoph Hellwig
parent
2dbd21dc15
commit
882c8684b1
@@ -53,7 +53,7 @@ _supported_os Linux
|
|||||||
# Must have loop device
|
# Must have loop device
|
||||||
_require_loop
|
_require_loop
|
||||||
|
|
||||||
LOOP_DEV=$TEST_DIR/$seq.fs
|
LOOP_IMG=$TEST_DIR/$seq.fs
|
||||||
LOOP_MNT=$TEST_DIR/$seq.mnt
|
LOOP_MNT=$TEST_DIR/$seq.mnt
|
||||||
|
|
||||||
_filter_io()
|
_filter_io()
|
||||||
@@ -75,7 +75,7 @@ _grow_loop()
|
|||||||
check=$4
|
check=$4
|
||||||
agsize=$5
|
agsize=$5
|
||||||
|
|
||||||
dparam="file,name=$LOOP_DEV,size=$original"
|
dparam="file,name=$LOOP_IMG,size=$original"
|
||||||
if [ -n "$agsize" ]; then
|
if [ -n "$agsize" ]; then
|
||||||
dparam="$dparam,agsize=$agsize"
|
dparam="$dparam,agsize=$agsize"
|
||||||
fi
|
fi
|
||||||
@@ -89,9 +89,9 @@ _grow_loop()
|
|||||||
| _filter_mkfs 2>/dev/null
|
| _filter_mkfs 2>/dev/null
|
||||||
|
|
||||||
echo "*** extend loop file"
|
echo "*** extend loop file"
|
||||||
$XFS_IO_PROG -c "pwrite $new_size $bsize" $LOOP_DEV | _filter_io
|
$XFS_IO_PROG -c "pwrite $new_size $bsize" $LOOP_IMG | _filter_io
|
||||||
echo "*** mount loop filesystem"
|
echo "*** mount loop filesystem"
|
||||||
mount -t xfs -o loop $LOOP_DEV $LOOP_MNT
|
mount -t xfs -o loop $LOOP_IMG $LOOP_MNT
|
||||||
|
|
||||||
echo "*** grow loop filesystem"
|
echo "*** grow loop filesystem"
|
||||||
#xfs_growfs $LOOP_MNT 2>&1 | grep -e "^data" #| _filter_growfs 2>/dev/null
|
#xfs_growfs $LOOP_MNT 2>&1 | grep -e "^data" #| _filter_growfs 2>/dev/null
|
||||||
@@ -104,10 +104,13 @@ _grow_loop()
|
|||||||
if [ "$check" -gt "0" ]
|
if [ "$check" -gt "0" ]
|
||||||
then
|
then
|
||||||
echo "*** check"
|
echo "*** check"
|
||||||
|
LOOP_DEV=`losetup -f`
|
||||||
|
losetup $LOOP_DEV $LOOP_IMG
|
||||||
_check_xfs_filesystem $LOOP_DEV none none
|
_check_xfs_filesystem $LOOP_DEV none none
|
||||||
|
losetup -d $LOOP_DEV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f $LOOP_DEV
|
rm -f $LOOP_IMG
|
||||||
}
|
}
|
||||||
|
|
||||||
# Wes' problem sizes...
|
# Wes' problem sizes...
|
||||||
|
|||||||
Reference in New Issue
Block a user