common/xfs: refactor commands to select a particular xfs backing device
[xfstests-dev.git] / common / populate
index 4e5b645f22fb1df9e6fd04a242af29459754025d..867776cdd189bf6184cc058692f1cd5d52e3ff47 100644 (file)
@@ -162,7 +162,7 @@ _scratch_xfs_populate() {
        # Clear the rtinherit flag on the root directory so that files are
        # always created on the data volume regardless of MKFS_OPTIONS.  We can
        # set the realtime flag when needed.
-       $XFS_IO_PROG -c 'chattr -t' $SCRATCH_MNT
+       _xfs_force_bdev data $SCRATCH_MNT
 
        blksz="$(stat -f -c '%s' "${SCRATCH_MNT}")"
        dblksz="$($XFS_INFO_PROG "${SCRATCH_MNT}" | grep naming.*bsize | sed -e 's/^.*bsize=//g' -e 's/\([0-9]*\).*$/\1/g')"
@@ -230,7 +230,8 @@ _scratch_xfs_populate() {
        # Char & block
        echo "+ special"
        mknod "${SCRATCH_MNT}/S_IFCHR" c 1 1
-       mknod "${SCRATCH_MNT}/S_IFBLK" c 1 1
+       mknod "${SCRATCH_MNT}/S_IFBLK" b 1 1
+       mknod "${SCRATCH_MNT}/S_IFIFO" p
 
        # special file with an xattr
        setfacl -P -m u:nobody:r ${SCRATCH_MNT}/S_IFCHR
@@ -402,7 +403,8 @@ _scratch_ext4_populate() {
        # Char & block
        echo "+ special"
        mknod "${SCRATCH_MNT}/S_IFCHR" c 1 1
-       mknod "${SCRATCH_MNT}/S_IFBLK" c 1 1
+       mknod "${SCRATCH_MNT}/S_IFBLK" b 1 1
+       mknod "${SCRATCH_MNT}/S_IFIFO" p
 
        # special file with an xattr
        setfacl -P -m u:nobody:r ${SCRATCH_MNT}/S_IFCHR
@@ -580,6 +582,7 @@ _scratch_xfs_populate_check() {
        extents_slink="$(__populate_find_inode "${SCRATCH_MNT}/S_IFLNK.FMT_EXTENTS")"
        bdev="$(__populate_find_inode "${SCRATCH_MNT}/S_IFBLK")"
        cdev="$(__populate_find_inode "${SCRATCH_MNT}/S_IFCHR")"
+       fifo="$(__populate_find_inode "${SCRATCH_MNT}/S_IFIFO")"
        local_attr="$(__populate_find_inode "${SCRATCH_MNT}/ATTR.FMT_LOCAL")"
        leaf_attr="$(__populate_find_inode "${SCRATCH_MNT}/ATTR.FMT_LEAF")"
        node_attr="$(__populate_find_inode "${SCRATCH_MNT}/ATTR.FMT_NODE")"
@@ -605,6 +608,7 @@ _scratch_xfs_populate_check() {
        __populate_check_xfs_dformat "${btree_dir}" "btree"
        __populate_check_xfs_dformat "${bdev}" "dev"
        __populate_check_xfs_dformat "${cdev}" "dev"
+       __populate_check_xfs_dformat "${fifo}" "dev"
        __populate_check_xfs_attr "${local_attr}" "local"
        __populate_check_xfs_attr "${leaf_attr}" "leaf"
        __populate_check_xfs_attr "${node_attr}" "node"
@@ -804,13 +808,23 @@ _fill_fs()
 _scratch_populate_cache_tag() {
        local extra_descr=""
        local size="$(blockdev --getsz "${SCRATCH_DEV}")"
+       local logdev_sz="none"
+       local rtdev_sz="none"
+
+       if [ "${USE_EXTERNAL}" = "yes" ] && [ -n "${SCRATCH_LOGDEV}" ]; then
+               logdev_sz="$(blockdev --getsz "${SCRATCH_LOGDEV}")"
+       fi
+
+       if [ "${USE_EXTERNAL}" = "yes" ] && [ -n "${SCRATCH_RTDEV}" ]; then
+               rtdev_sz="$(blockdev --getsz "${SCRATCH_RTDEV}")"
+       fi
 
        case "${FSTYP}" in
        "ext4")
-               extra_descr="LOGDEV ${SCRATCH_LOGDEV} USE_EXTERNAL ${USE_EXTERNAL}"
+               extra_descr="LOGDEV_SIZE ${logdev_sz}"
                ;;
        "xfs")
-               extra_descr="LOGDEV ${SCRATCH_LOGDEV} USE_EXTERNAL ${USE_EXTERNAL} RTDEV ${SCRATCH_RTDEV}"
+               extra_descr="LOGDEV_SIZE ${logdev_sz} RTDEV_SIZE ${rtdev_sz}"
                _populate_xfs_qmount_option
                if echo "${MOUNT_OPTIONS}" | grep -q 'usrquota'; then
                        extra_descr="${extra_descr} QUOTAS"
@@ -824,6 +838,17 @@ _scratch_populate_cache_tag() {
 _scratch_populate_restore_cached() {
        local metadump="$1"
 
+       # If we're configured for compressed dumps and there isn't already an
+       # uncompressed dump, see if we can use DUMP_COMPRESSOR to decompress
+       # something.
+       if [ -n "$DUMP_COMPRESSOR" ]; then
+               for compr in "$metadump".*; do
+                       [ -e "$compr" ] && $DUMP_COMPRESSOR -d -f -k "$compr" && break
+               done
+       fi
+
+       test -r "$metadump" || return 1
+
        case "${FSTYP}" in
        "xfs")
                xfs_mdrestore "${metadump}" "${SCRATCH_DEV}" && return 0
@@ -855,8 +880,7 @@ _scratch_populate_cached() {
                rm -rf "${POPULATE_METADUMP}"
 
        # Try to restore from the metadump
-       test -r "${POPULATE_METADUMP}" && \
-               _scratch_populate_restore_cached "${POPULATE_METADUMP}" && \
+       _scratch_populate_restore_cached "${POPULATE_METADUMP}" && \
                return
 
        # Oh well, just create one from scratch
@@ -867,11 +891,18 @@ _scratch_populate_cached() {
                _scratch_xfs_populate $@
                _scratch_xfs_populate_check
                _scratch_xfs_metadump "${POPULATE_METADUMP}"
+
+               local logdev=
+               [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+                       logdev=$SCRATCH_LOGDEV
+
+               _xfs_metadump "$POPULATE_METADUMP" "$SCRATCH_DEV" "$logdev" \
+                       compress
                ;;
        "ext2"|"ext3"|"ext4")
                _scratch_ext4_populate $@
                _scratch_ext4_populate_check
-               e2image -Q "${SCRATCH_DEV}" "${POPULATE_METADUMP}"
+               _ext4_metadump "${SCRATCH_DEV}" "${POPULATE_METADUMP}" compress
                ;;
        *)
                _fail "Don't know how to populate a ${FSTYP} filesystem."