#!/bin/sh -f # SPDX-License-Identifier: GPL-2.0 # # Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. # OPTS="" USAGE="Usage: xfs_info [-V] [-t mtab] [mountpoint|device|file]" # Try to find a loop device associated with a file. We only want to return # one loopdev (multiple loop devices can attach to a single file) so we grab # the last line and return it if it's actually a block device. try_find_loop_dev_for_file() { local x="$(losetup -O NAME -j "$1" 2> /dev/null | tail -n 1)" test -b "$x" && echo "$x" } while getopts "t:V" c do case $c in t) OPTS="-t $OPTARG" ;; V) xfs_spaceman -p xfs_info -V status=$? exit $status ;; *) echo $USAGE 1>&2 exit 2 ;; esac done set -- extra "$@" shift $OPTIND case $# in 1) arg="$1" # See if we can map the arg to a loop device loopdev="$(try_find_loop_dev_for_file "${arg}")" test -n "${loopdev}" && arg="${loopdev}" # If we find a mountpoint for the device, do a live query; # otherwise try reading the fs with xfs_db. if mountpt="$(findmnt -t xfs -f -n -o TARGET "${arg}" 2> /dev/null)"; then xfs_spaceman -p xfs_info -c "info" $OPTS "${mountpt}" status=$? else xfs_db -p xfs_info -c "info" $OPTS "${arg}" status=$? fi ;; *) echo $USAGE 1>&2 exit 2 ;; esac exit $status