SCRATCH_DEV=$data_img _scratch_xfs_mdrestore $metadump_file
# Create loopdev for data device so we can mount the fs
- METADUMP_DATA_LOOP_DEV=$(_create_loop_device $data_img)
+ METADUMP_DATA_LOOP_DEV=$(_create_loop_device_like_bdev $data_img $SCRATCH_DEV)
# Mount fs, run an extra test, fsck, and unmount
SCRATCH_DEV=$METADUMP_DATA_LOOP_DEV _scratch_mount
_scratch_xfs_mdrestore $metadump_file
# Create loopdev for data device so we can mount the fs
- METADUMP_DATA_LOOP_DEV=$(_create_loop_device $data_img)
+ METADUMP_DATA_LOOP_DEV=$(_create_loop_device_like_bdev $data_img $SCRATCH_DEV)
# Create loopdev for log device if we recovered anything
- test -s "$log_img" && METADUMP_LOG_LOOP_DEV=$(_create_loop_device $log_img)
+ if [ -s "$log_img" ]; then
+ METADUMP_LOG_LOOP_DEV=$(_create_loop_device_like_bdev $log_img $SCRATCH_LOGDEV)
+ fi
# Create loopdev for rt device if we recovered anything
- test -s "$rt_img" && METADUMP_RT_LOOP_DEV=$(_create_loop_device $rt_img)
+ if [ -s "$rt_img" ]; then
+ METADUMP_RT_LOOP_DEV=$(_create_loop_device_like_bdev $rt_img $SCRATCH_RTDEV)
+ fi
# Mount fs, run an extra test, fsck, and unmount
SCRATCH_DEV=$METADUMP_DATA_LOOP_DEV SCRATCH_LOGDEV=$METADUMP_LOG_LOOP_DEV SCRATCH_RTDEV=$METADUMP_RT_LOOP_DEV _scratch_mount
echo $dev
}
+# Create a loop device from a given file and configure it to support the same
+# sector size as the given block device.
+_create_loop_device_like_bdev()
+{
+ local file=$1
+ local bdev=$2
+ local dev
+ local blksize
+
+ test -b "$bdev" || \
+ _fail "$file: must be a block device"
+
+ blksize="$(blockdev --getss "$bdev")"
+
+ _create_loop_device "$file" "$blksize"
+}
+
_destroy_loop_device()
{
local dev=$1
# cgroup I/O accounting doesn't work on partitions. Use a loop device to rule
# that out.
-loop_dev=$(_create_loop_device $SCRATCH_DEV)
+loop_dev=$(_create_loop_device_like_bdev $SCRATCH_DEV $SCRATCH_DEV)
smajor=$((0x`stat -L -c %t $loop_dev`))
sminor=$((0x`stat -L -c %T $loop_dev`))