# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
# Mountain View, CA 94043, USA, or: http://www.sgi.com
#-----------------------------------------------------------------------
+. ./common/quota
_require_populate_commands() {
_require_xfs_io_command "falloc"
done
}
+# For XFS, force on all the quota options if quota is enabled
+# and the user didn't feed us noquota.
+_populate_xfs_qmount_option()
+{
+ # User explicitly told us not to quota
+ if echo "${MOUNT_OPTIONS}" | grep -q 'noquota'; then
+ return
+ fi
+
+ # Don't bother if we can't turn on quotas
+ if [ ! -f /proc/fs/xfs/xqmstat ]; then
+ # No quota support
+ return
+ elif [ "${USE_EXTERNAL}" = "yes" ] && [ ! -z "${SCRATCH_RTDEV}" ]; then
+ # Quotas not supported on rt filesystems
+ return
+ elif [ -z "${XFS_QUOTA_PROG}" ]; then
+ # xfs quota tools not installed
+ return
+ fi
+
+ # Turn on all the quotas
+ if xfs_info "${TEST_DIR}" | grep -q 'crc=1'; then
+ # v5 filesystems can have group & project quotas
+ quota="usrquota,grpquota,prjquota"
+ else
+ # v4 filesystems cannot mix group & project quotas
+ quota="usrquota,grpquota"
+ fi
+
+ # Inject our quota mount options
+ if echo "${MOUNT_OPTIONS}" | grep -q "${quota}"; then
+ return
+ elif echo "${MOUNT_OPTIONS}" | egrep -q '(quota|noenforce)'; then
+ _qmount_option "${quota}"
+ else
+ export MOUNT_OPTIONS="$MOUNT_OPTIONS -o ${quota}"
+ echo "MOUNT_OPTIONS = $MOUNT_OPTIONS" >>$seqres.full
+ fi
+}
+
# Populate an XFS on the scratch device with (we hope) all known
# types of metadata block
_scratch_xfs_populate() {
esac
done
+ _populate_xfs_qmount_option
_scratch_mount
blksz="$(stat -f -c '%s' "${SCRATCH_MNT}")"
dblksz="$(xfs_info "${SCRATCH_MNT}" | grep naming.*bsize | sed -e 's/^.*bsize=//g' -e 's/\([0-9]*\).*$/\1/g')"
rm -rf "$(find "${POPULATE_METADUMP}" -mtime +2 2>/dev/null)"
# Throw away cached image if it doesn't match our spec.
- meta_descr="FSTYP ${FSTYP} MKFS_OPTIONS ${MKFS_OPTIONS} SIZE $(blockdev --getsz "${SCRATCH_DEV}") ARGS $@"
+ case "${FSTYP}" in
+ "ext4")
+ extra_descr="LOGDEV ${SCRATCH_LOGDEV} USE_EXTERNAL ${USE_EXTERNAL}"
+ # ext4 cannot e2image external logs, so we cannot restore
+ test -n "${SCRATCH_LOGDEV}" && rm -f "${POPULATE_METADUMP}"
+ ;;
+ "xfs")
+ extra_descr="LOGDEV ${SCRATCH_LOGDEV} USE_EXTERNAL ${USE_EXTERNAL} RTDEV ${SCRATCH_RTDEV}"
+ _populate_xfs_qmount_option
+ if echo "${MOUNT_OPTIONS}" | grep -q 'usrquota'; then
+ extra_descr="${extra_descr} QUOTAS"
+ fi
+ ;;
+ *)
+ extra_descr="";;
+ esac
+ meta_descr="FSTYP ${FSTYP} MKFS_OPTIONS ${MKFS_OPTIONS} SIZE $(blockdev --getsz "${SCRATCH_DEV}") ${extra_descr} ARGS $@"
cmp -s "${POPULATE_METADUMP_DESCR}" <(echo "${meta_descr}") || rm -rf "${POPULATE_METADUMP}"
# Do we have a cached image?