diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/Makefile.am | 106 | ||||
-rwxr-xr-x | cmd/arc_summary (renamed from cmd/arc_summary/arc_summary3) | 0 | ||||
-rw-r--r-- | cmd/arc_summary/Makefile.am | 8 | ||||
-rwxr-xr-x | cmd/arcstat.in (renamed from cmd/arcstat/arcstat.in) | 0 | ||||
-rw-r--r-- | cmd/arcstat/Makefile.am | 4 | ||||
-rwxr-xr-x | cmd/dbufstat.in (renamed from cmd/dbufstat/dbufstat.in) | 0 | ||||
-rw-r--r-- | cmd/dbufstat/Makefile.am | 4 | ||||
-rwxr-xr-x | cmd/fsck.zfs.in (renamed from cmd/fsck_zfs/fsck.zfs.in) | 0 | ||||
-rw-r--r-- | cmd/fsck_zfs/Makefile.am | 5 | ||||
-rw-r--r-- | cmd/mount_zfs.c (renamed from cmd/mount_zfs/mount_zfs.c) | 0 | ||||
-rw-r--r-- | cmd/mount_zfs/Makefile.am | 20 | ||||
-rw-r--r-- | cmd/vdev_id/Makefile.am | 2 | ||||
-rwxr-xr-x | cmd/vdev_id/vdev_id | 792 | ||||
-rw-r--r-- | cmd/zfs_ids_to_path.c (renamed from cmd/zfs_ids_to_path/zfs_ids_to_path.c) | 0 | ||||
-rw-r--r-- | cmd/zfs_ids_to_path/Makefile.am | 8 | ||||
-rw-r--r-- | cmd/zgenhostid.c (renamed from cmd/zgenhostid/zgenhostid.c) | 0 | ||||
-rw-r--r-- | cmd/zgenhostid/Makefile.am | 5 | ||||
-rw-r--r-- | cmd/zhack.c (renamed from cmd/zhack/zhack.c) | 0 | ||||
-rw-r--r-- | cmd/zhack/Makefile.am | 12 | ||||
-rw-r--r-- | cmd/ztest.c (renamed from cmd/ztest/ztest.c) | 0 | ||||
-rw-r--r-- | cmd/ztest/Makefile.am | 18 | ||||
-rw-r--r-- | cmd/zvol_id/Makefile.am | 5 | ||||
-rw-r--r-- | cmd/zvol_id/zvol_id_main.c | 129 | ||||
-rwxr-xr-x | cmd/zvol_wait (renamed from cmd/zvol_wait/zvol_wait) | 0 | ||||
-rw-r--r-- | cmd/zvol_wait/Makefile.am | 2 |
25 files changed, 91 insertions, 1029 deletions
diff --git a/cmd/Makefile.am b/cmd/Makefile.am index 2fa281cad..9959760b5 100644 --- a/cmd/Makefile.am +++ b/cmd/Makefile.am @@ -2,38 +2,114 @@ bin_SCRIPTS = bin_PROGRAMS = sbin_SCRIPTS = sbin_PROGRAMS = -udev_PROGRAMS = dist_bin_SCRIPTS = zfsexec_PROGRAMS = -dist_udev_SCRIPTS = mounthelper_PROGRAMS = -include $(srcdir)/%D%/fsck_zfs/Makefile.am + +sbin_SCRIPTS += fsck.zfs +SHELLCHECKSCRIPTS += fsck.zfs +CLEANFILES += fsck.zfs +EXTRA_DIST += %D%/fsck.zfs.in +$(call SUBST,fsck.zfs,%D%/) + + +sbin_PROGRAMS += zfs_ids_to_path +CPPCHECKTARGETS += zfs_ids_to_path + +zfs_ids_to_path_SOURCES = \ + %D%/zfs_ids_to_path.c + +zfs_ids_to_path_LDADD = \ + libzfs.la + + +zhack_CPPFLAGS = $(AM_CPPFLAGS) $(FORCEDEBUG_CPPFLAGS) + +sbin_PROGRAMS += zhack +CPPCHECKTARGETS += zhack + +zhack_SOURCES = \ + %D%/zhack.c + +zhack_LDADD = \ + libzpool.la \ + libzfs_core.la \ + libnvpair.la + + +ztest_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) +# Get rid of compiler warning for unchecked truncating snprintfs on gcc 7.1.1 +ztest_CFLAGS += $(NO_FORMAT_TRUNCATION) +ztest_CPPFLAGS = $(AM_CPPFLAGS) $(FORCEDEBUG_CPPFLAGS) + +sbin_PROGRAMS += ztest +CPPCHECKTARGETS += ztest + +ztest_SOURCES = \ + %D%/ztest.c + +ztest_LDADD = \ + libzpool.la \ + libzfs_core.la \ + libnvpair.la + +ztest_LDADD += -lm +ztest_LDFLAGS = -pthread + + include $(srcdir)/%D%/raidz_test/Makefile.am -include $(srcdir)/%D%/vdev_id/Makefile.am include $(srcdir)/%D%/zdb/Makefile.am include $(srcdir)/%D%/zfs/Makefile.am -include $(srcdir)/%D%/zfs_ids_to_path/Makefile.am -include $(srcdir)/%D%/zhack/Makefile.am include $(srcdir)/%D%/zinject/Makefile.am include $(srcdir)/%D%/zpool/Makefile.am include $(srcdir)/%D%/zpool_influxdb/Makefile.am include $(srcdir)/%D%/zstream/Makefile.am -include $(srcdir)/%D%/ztest/Makefile.am + if BUILD_LINUX -include $(srcdir)/%D%/mount_zfs/Makefile.am +mounthelper_PROGRAMS += mount.zfs +CPPCHECKTARGETS += mount.zfs + +mount_zfs_SOURCES = \ + %D%/mount_zfs.c + +mount_zfs_LDADD = \ + libzfs.la \ + libzfs_core.la \ + libnvpair.la + +mount_zfs_LDADD += $(LTLIBINTL) + +CPPCHECKTARGETS += raidz_test + + +sbin_PROGRAMS += zgenhostid +CPPCHECKTARGETS += zgenhostid + +zgenhostid_SOURCES = \ + %D%/zgenhostid.c + + +dist_bin_SCRIPTS += %D%/zvol_wait +SHELLCHECKSCRIPTS += %D%/zvol_wait + + include $(srcdir)/%D%/zed/Makefile.am -include $(srcdir)/%D%/zgenhostid/Makefile.am -include $(srcdir)/%D%/zvol_id/Makefile.am -include $(srcdir)/%D%/zvol_wait/Makefile.am endif + if USING_PYTHON -include $(srcdir)/%D%/arc_summary/Makefile.am -include $(srcdir)/%D%/arcstat/Makefile.am -include $(srcdir)/%D%/dbufstat/Makefile.am +bin_SCRIPTS += arc_summary arcstat dbufstat +CLEANFILES += arc_summary arcstat dbufstat +EXTRA_DIST += %D%/arc_summary %D%/arcstat.in %D%/dbufstat.in + +$(call SUBST,arcstat,%D%/) +$(call SUBST,dbufstat,%D%/) +arc_summary: %D%/arc_summary + $(AM_V_at)cp $< $@ endif + PHONY += cmd -cmd: $(bin_SCRIPTS) $(bin_PROGRAMS) $(sbin_SCRIPTS) $(sbin_PROGRAMS) $(udev_PROGRAMS) $(dist_bin_SCRIPTS) $(zfsexec_PROGRAMS) $(dist_udev_SCRIPTS) $(mounthelper_PROGRAMS) +cmd: $(bin_SCRIPTS) $(bin_PROGRAMS) $(sbin_SCRIPTS) $(sbin_PROGRAMS) $(dist_bin_SCRIPTS) $(zfsexec_PROGRAMS) $(mounthelper_PROGRAMS) diff --git a/cmd/arc_summary/arc_summary3 b/cmd/arc_summary index 4f275813d..4f275813d 100755 --- a/cmd/arc_summary/arc_summary3 +++ b/cmd/arc_summary diff --git a/cmd/arc_summary/Makefile.am b/cmd/arc_summary/Makefile.am deleted file mode 100644 index 90dd981d9..000000000 --- a/cmd/arc_summary/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -bin_SCRIPTS += arc_summary -CLEANFILES += arc_summary - -EXTRA_DIST += %D%/arc_summary3 -ARC_SUMMARY = %D%/arc_summary3 - -arc_summary: $(ARC_SUMMARY) - $(AM_V_at)cp $< $@ diff --git a/cmd/arcstat/arcstat.in b/cmd/arcstat.in index 9327f644f..9327f644f 100755 --- a/cmd/arcstat/arcstat.in +++ b/cmd/arcstat.in diff --git a/cmd/arcstat/Makefile.am b/cmd/arcstat/Makefile.am deleted file mode 100644 index d7fd81074..000000000 --- a/cmd/arcstat/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -bin_SCRIPTS += arcstat -CLEANFILES += arcstat -EXTRA_DIST += %D%/arcstat.in -$(call SUBST,arcstat,%D%/) diff --git a/cmd/dbufstat/dbufstat.in b/cmd/dbufstat.in index b716a0c97..b716a0c97 100755 --- a/cmd/dbufstat/dbufstat.in +++ b/cmd/dbufstat.in diff --git a/cmd/dbufstat/Makefile.am b/cmd/dbufstat/Makefile.am deleted file mode 100644 index 107f35573..000000000 --- a/cmd/dbufstat/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -bin_SCRIPTS += dbufstat -CLEANFILES += dbufstat -EXTRA_DIST += %D%/dbufstat.in -$(call SUBST,dbufstat,%D%/) diff --git a/cmd/fsck_zfs/fsck.zfs.in b/cmd/fsck.zfs.in index f0d4d2ec3..f0d4d2ec3 100755 --- a/cmd/fsck_zfs/fsck.zfs.in +++ b/cmd/fsck.zfs.in diff --git a/cmd/fsck_zfs/Makefile.am b/cmd/fsck_zfs/Makefile.am deleted file mode 100644 index a252e3d0c..000000000 --- a/cmd/fsck_zfs/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -sbin_SCRIPTS += fsck.zfs -SHELLCHECKSCRIPTS += fsck.zfs -CLEANFILES += fsck.zfs -EXTRA_DIST += %D%/fsck.zfs.in -$(call SUBST,fsck.zfs,%D%/) diff --git a/cmd/mount_zfs/mount_zfs.c b/cmd/mount_zfs.c index 669ed88f9..669ed88f9 100644 --- a/cmd/mount_zfs/mount_zfs.c +++ b/cmd/mount_zfs.c diff --git a/cmd/mount_zfs/Makefile.am b/cmd/mount_zfs/Makefile.am deleted file mode 100644 index 0ba61abe5..000000000 --- a/cmd/mount_zfs/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -# -# Ignore the prefix for the mount helper. It must be installed in /sbin/ -# because this path is hardcoded in the mount(8) for security reasons. -# However, if needed, the configure option --with-mounthelperdir= can be used -# to override the default install location. -# -mounthelper_PROGRAMS += mount.zfs -CPPCHECKTARGETS += mount.zfs - -mount_zfs_SOURCES = \ - %D%/mount_zfs.c - -mount_zfs_LDADD = \ - libzfs.la \ - libzfs_core.la \ - libnvpair.la - -mount_zfs_LDADD += $(LTLIBINTL) - -CPPCHECKTARGETS += raidz_test diff --git a/cmd/vdev_id/Makefile.am b/cmd/vdev_id/Makefile.am deleted file mode 100644 index ca57a9107..000000000 --- a/cmd/vdev_id/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -dist_udev_SCRIPTS += %D%/vdev_id -# TODO: #12084: SHELLCHECKSCRIPTS += %D%/vdev_id diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id deleted file mode 100755 index 7b5aab141..000000000 --- a/cmd/vdev_id/vdev_id +++ /dev/null @@ -1,792 +0,0 @@ -#!/bin/sh -# -# vdev_id: udev helper to generate user-friendly names for JBOD disks -# -# This script parses the file /etc/zfs/vdev_id.conf to map a -# physical path in a storage topology to a channel name. The -# channel name is combined with a disk enclosure slot number to -# create an alias that reflects the physical location of the drive. -# This is particularly helpful when it comes to tasks like replacing -# failed drives. Slot numbers may also be re-mapped in case the -# default numbering is unsatisfactory. The drive aliases will be -# created as symbolic links in /dev/disk/by-vdev. -# -# The currently supported topologies are sas_direct and sas_switch. -# A multipath mode is supported in which dm-mpath devices are -# handled by examining the first-listed running component disk. In -# multipath mode the configuration file should contain a channel -# definition with the same name for each path to a given enclosure. -# -# The alias keyword provides a simple way to map already-existing -# device symlinks to more convenient names. It is suitable for -# small, static configurations or for sites that have some automated -# way to generate the mapping file. -# -# -# Some example configuration files are given below. - -# # -# # Example vdev_id.conf - sas_direct. -# # -# -# multipath no -# topology sas_direct -# phys_per_port 4 -# slot bay -# -# # PCI_ID HBA PORT CHANNEL NAME -# channel 85:00.0 1 A -# channel 85:00.0 0 B -# channel 86:00.0 1 C -# channel 86:00.0 0 D -# -# # Custom mapping for Channel A -# -# # Linux Mapped -# # Slot Slot Channel -# slot 1 7 A -# slot 2 10 A -# slot 3 3 A -# slot 4 6 A -# -# # Default mapping for B, C, and D -# slot 1 4 -# slot 2 2 -# slot 3 1 -# slot 4 3 - -# # -# # Example vdev_id.conf - sas_switch -# # -# -# topology sas_switch -# -# # SWITCH PORT CHANNEL NAME -# channel 1 A -# channel 2 B -# channel 3 C -# channel 4 D - -# # -# # Example vdev_id.conf - multipath -# # -# -# multipath yes -# -# # PCI_ID HBA PORT CHANNEL NAME -# channel 85:00.0 1 A -# channel 85:00.0 0 B -# channel 86:00.0 1 A -# channel 86:00.0 0 B - -# # -# # Example vdev_id.conf - multipath / multijbod-daisychaining -# # -# -# multipath yes -# multijbod yes -# -# # PCI_ID HBA PORT CHANNEL NAME -# channel 85:00.0 1 A -# channel 85:00.0 0 B -# channel 86:00.0 1 A -# channel 86:00.0 0 B - -# # -# # Example vdev_id.conf - multipath / mixed -# # -# -# multipath yes -# slot mix -# -# # PCI_ID HBA PORT CHANNEL NAME -# channel 85:00.0 3 A -# channel 85:00.0 2 B -# channel 86:00.0 3 A -# channel 86:00.0 2 B -# channel af:00.0 0 C -# channel af:00.0 1 C - -# # -# # Example vdev_id.conf - alias -# # -# -# # by-vdev -# # name fully qualified or base name of device link -# alias d1 /dev/disk/by-id/wwn-0x5000c5002de3b9ca -# alias d2 wwn-0x5000c5002def789e - -PATH=/bin:/sbin:/usr/bin:/usr/sbin -CONFIG=/etc/zfs/vdev_id.conf -PHYS_PER_PORT= -DEV= -TOPOLOGY= -BAY= -ENCL_ID="" -UNIQ_ENCL_ID="" - -usage() { - cat << EOF -Usage: vdev_id [-h] - vdev_id <-d device> [-c config_file] [-p phys_per_port] - [-g sas_direct|sas_switch|scsi] [-m] - - -c specify name of an alternative config file [default=$CONFIG] - -d specify basename of device (i.e. sda) - -e Create enclose device symlinks only (/dev/by-enclosure) - -g Storage network topology [default="$TOPOLOGY"] - -m Run in multipath mode - -j Run in multijbod mode - -p number of phy's per switch port [default=$PHYS_PER_PORT] - -h show this summary -EOF - exit 1 - # exit with error to avoid processing usage message by a udev rule -} - -map_slot() { - LINUX_SLOT=$1 - CHANNEL=$2 - - MAPPED_SLOT=$(awk -v linux_slot="$LINUX_SLOT" -v channel="$CHANNEL" \ - '$1 == "slot" && $2 == linux_slot && \ - ($4 ~ "^"channel"$" || $4 ~ /^$/) { print $3; exit}' $CONFIG) - if [ -z "$MAPPED_SLOT" ] ; then - MAPPED_SLOT=$LINUX_SLOT - fi - printf "%d" "${MAPPED_SLOT}" -} - -map_channel() { - MAPPED_CHAN= - PCI_ID=$1 - PORT=$2 - - case $TOPOLOGY in - "sas_switch") - MAPPED_CHAN=$(awk -v port="$PORT" \ - '$1 == "channel" && $2 == port \ - { print $3; exit }' $CONFIG) - ;; - "sas_direct"|"scsi") - MAPPED_CHAN=$(awk -v pciID="$PCI_ID" -v port="$PORT" \ - '$1 == "channel" && $2 == pciID && $3 == port \ - {print $4}' $CONFIG) - ;; - esac - printf "%s" "${MAPPED_CHAN}" -} - -get_encl_id() { - set -- $(echo $1) - count=$# - - i=1 - while [ $i -le $count ] ; do - d=$(eval echo '$'{$i}) - id=$(cat "/sys/class/enclosure/${d}/id") - ENCL_ID="${ENCL_ID} $id" - i=$((i + 1)) - done -} - -get_uniq_encl_id() { - for uuid in ${ENCL_ID}; do - found=0 - - for count in ${UNIQ_ENCL_ID}; do - if [ $count = $uuid ]; then - found=1 - break - fi - done - - if [ $found -eq 0 ]; then - UNIQ_ENCL_ID="${UNIQ_ENCL_ID} $uuid" - fi - done -} - -# map_jbod explainer: The bsg driver knows the difference between a SAS -# expander and fanout expander. Use hostX instance along with top-level -# (whole enclosure) expander instances in /sys/class/enclosure and -# matching a field in an array of expanders, using the index of the -# matched array field as the enclosure instance, thereby making jbod IDs -# dynamic. Avoids reliance on high overhead userspace commands like -# multipath and lsscsi and instead uses existing sysfs data. $HOSTCHAN -# variable derived from devpath gymnastics in sas_handler() function. -map_jbod() { - DEVEXP=$(ls -l "/sys/block/$DEV/device/" | grep enclos | awk -F/ '{print $(NF-1) }') - DEV=$1 - - # Use "set --" to create index values (Arrays) - set -- $(ls -l /sys/class/enclosure | grep -v "^total" | awk '{print $9}') - # Get count of total elements - JBOD_COUNT=$# - JBOD_ITEM=$* - - # Build JBODs (enclosure) id from sys/class/enclosure/<dev>/id - get_encl_id "$JBOD_ITEM" - # Different expander instances for each paths. - # Filter out and keep only unique id. - get_uniq_encl_id - - # Identify final 'mapped jbod' - j=0 - for count in ${UNIQ_ENCL_ID}; do - i=1 - j=$((j + 1)) - while [ $i -le $JBOD_COUNT ] ; do - d=$(eval echo '$'{$i}) - id=$(cat "/sys/class/enclosure/${d}/id") - if [ "$d" = "$DEVEXP" ] && [ $id = $count ] ; then - MAPPED_JBOD=$j - break - fi - i=$((i + 1)) - done - done - - printf "%d" "${MAPPED_JBOD}" -} - -sas_handler() { - if [ -z "$PHYS_PER_PORT" ] ; then - PHYS_PER_PORT=$(awk '$1 == "phys_per_port" \ - {print $2; exit}' $CONFIG) - fi - PHYS_PER_PORT=${PHYS_PER_PORT:-4} - - if ! echo "$PHYS_PER_PORT" | grep -q -E '^[0-9]+$' ; then - echo "Error: phys_per_port value $PHYS_PER_PORT is non-numeric" - exit 1 - fi - - if [ -z "$MULTIPATH_MODE" ] ; then - MULTIPATH_MODE=$(awk '$1 == "multipath" \ - {print $2; exit}' $CONFIG) - fi - - if [ -z "$MULTIJBOD_MODE" ] ; then - MULTIJBOD_MODE=$(awk '$1 == "multijbod" \ - {print $2; exit}' $CONFIG) - fi - - # Use first running component device if we're handling a dm-mpath device - if [ "$MULTIPATH_MODE" = "yes" ] ; then - # If udev didn't tell us the UUID via DM_NAME, check /dev/mapper - if [ -z "$DM_NAME" ] ; then - DM_NAME=$(ls -l --full-time /dev/mapper | - grep "$DEV"$ | awk '{print $9}') - fi - - # For raw disks udev exports DEVTYPE=partition when - # handling partitions, and the rules can be written to - # take advantage of this to append a -part suffix. For - # dm devices we get DEVTYPE=disk even for partitions so - # we have to append the -part suffix directly in the - # helper. - if [ "$DEVTYPE" != "partition" ] ; then - # Match p[number], remove the 'p' and prepend "-part" - PART=$(echo "$DM_NAME" | - awk 'match($0,/p[0-9]+$/) {print "-part"substr($0,RSTART+1,RLENGTH-1)}') - fi - - # Strip off partition information. - DM_NAME=$(echo "$DM_NAME" | sed 's/p[0-9][0-9]*$//') - if [ -z "$DM_NAME" ] ; then - return - fi - - # Utilize DM device name to gather subordinate block devices - # using sysfs to avoid userspace utilities - - # If our DEVNAME is something like /dev/dm-177, then we may be - # able to get our DMDEV from it. - DMDEV=$(echo $DEVNAME | sed 's;/dev/;;g') - if [ ! -e /sys/block/$DMDEV/slaves/* ] ; then - # It's not there, try looking in /dev/mapper - DMDEV=$(ls -l --full-time /dev/mapper | grep $DM_NAME | - awk '{gsub("../", " "); print $NF}') - fi - - # Use sysfs pointers in /sys/block/dm-X/slaves because using - # userspace tools creates lots of overhead and should be avoided - # whenever possible. Use awk to isolate lowest instance of - # sd device member in dm device group regardless of string - # length. - DEV=$(ls "/sys/block/$DMDEV/slaves" | awk ' - { len=sprintf ("%20s",length($0)); gsub(/ /,0,str); a[NR]=len "_" $0; } - END { - asort(a) - print substr(a[1],22) - }') - - if [ -z "$DEV" ] ; then - return - fi - fi - - if echo "$DEV" | grep -q ^/devices/ ; then - sys_path=$DEV - else - sys_path=$(udevadm info -q path -p "/sys/block/$DEV" 2>/dev/null) - fi - - # Use positional parameters as an ad-hoc array - set -- $(echo "$sys_path" | tr / ' ') - num_dirs=$# - scsi_host_dir="/sys" - - # Get path up to /sys/.../hostX - i=1 - - while [ $i -le "$num_dirs" ] ; do - d=$(eval echo '$'{$i}) - scsi_host_dir="$scsi_host_dir/$d" - echo "$d" | grep -q -E '^host[0-9]+$' && break - i=$((i + 1)) - done - - # Lets grab the SAS host channel number and save it for JBOD sorting later - HOSTCHAN=$(echo "$d" | awk -F/ '{ gsub("host","",$NF); print $NF}') - - if [ $i = "$num_dirs" ] ; then - return - fi - - PCI_ID=$(eval echo '$'{$((i -1))} | awk -F: '{print $2":"$3}') - - # In sas_switch mode, the directory four levels beneath - # /sys/.../hostX contains symlinks to phy devices that reveal - # the switch port number. In sas_direct mode, the phy links one - # directory down reveal the HBA port. - port_dir=$scsi_host_dir - - case $TOPOLOGY in - "sas_switch") j=$((i + 4)) ;; - "sas_direct") j=$((i + 1)) ;; - esac - - i=$((i + 1)) - - while [ $i -le $j ] ; do - port_dir="$port_dir/$(eval echo '$'{$i})" - i=$((i + 1)) - done - - PHY=$(ls -vd "$port_dir"/phy* 2>/dev/null | head -1 | awk -F: '{print $NF}') - if [ -z "$PHY" ] ; then - PHY=0 - fi - PORT=$((PHY / PHYS_PER_PORT)) - - # Look in /sys/.../sas_device/end_device-X for the bay_identifier - # attribute. - end_device_dir=$port_dir - - while [ $i -lt "$num_dirs" ] ; do - d=$(eval echo '$'{$i}) - end_device_dir="$end_device_dir/$d" - if echo "$d" | grep -q '^end_device' ; then - end_device_dir="$end_device_dir/sas_device/$d" - break - fi - i=$((i + 1)) - done - - # Add 'mix' slot type for environments where dm-multipath devices - # include end-devices connected via SAS expanders or direct connection - # to SAS HBA. A mixed connectivity environment such as pool devices - # contained in a SAS JBOD and spare drives or log devices directly - # connected in a server backplane without expanders in the I/O path. - SLOT= - - case $BAY in - "bay") - SLOT=$(cat "$end_device_dir/bay_identifier" 2>/dev/null) - ;; - "mix") - if [ $(cat "$end_device_dir/bay_identifier" 2>/dev/null) ] ; then - SLOT=$(cat "$end_device_dir/bay_identifier" 2>/dev/null) - else - SLOT=$(cat "$end_device_dir/phy_identifier" 2>/dev/null) - fi - ;; - "phy") - SLOT=$(cat "$end_device_dir/phy_identifier" 2>/dev/null) - ;; - "port") - d=$(eval echo '$'{$i}) - SLOT=$(echo "$d" | sed -e 's/^.*://') - ;; - "id") - i=$((i + 1)) - d=$(eval echo '$'{$i}) - SLOT=$(echo "$d" | sed -e 's/^.*://') - ;; - "lun") - i=$((i + 2)) - d=$(eval echo '$'{$i}) - SLOT=$(echo "$d" | sed -e 's/^.*://') - ;; - "ses") - # look for this SAS path in all SCSI Enclosure Services - # (SES) enclosures - sas_address=$(cat "$end_device_dir/sas_address" 2>/dev/null) - enclosures=$(lsscsi -g | \ - sed -n -e '/enclosu/s/^.* \([^ ][^ ]*\) *$/\1/p') - for enclosure in $enclosures; do - set -- $(sg_ses -p aes "$enclosure" | \ - awk "/device slot number:/{slot=\$12} \ - /SAS address: $sas_address/\ - {print slot}") - SLOT=$1 - if [ -n "$SLOT" ] ; then - break - fi - done - ;; - esac - if [ -z "$SLOT" ] ; then - return - fi - - if [ "$MULTIJBOD_MODE" = "yes" ] ; then - CHAN=$(map_channel "$PCI_ID" "$PORT") - SLOT=$(map_slot "$SLOT" "$CHAN") - JBOD=$(map_jbod "$DEV") - - if [ -z "$CHAN" ] ; then - return - fi - echo "${CHAN}"-"${JBOD}"-"${SLOT}${PART}" - else - CHAN=$(map_channel "$PCI_ID" "$PORT") - SLOT=$(map_slot "$SLOT" "$CHAN") - - if [ -z "$CHAN" ] ; then - return - fi - echo "${CHAN}${SLOT}${PART}" - fi -} - -scsi_handler() { - if [ -z "$FIRST_BAY_NUMBER" ] ; then - FIRST_BAY_NUMBER=$(awk '$1 == "first_bay_number" \ - {print $2; exit}' $CONFIG) - fi - FIRST_BAY_NUMBER=${FIRST_BAY_NUMBER:-0} - - if [ -z "$PHYS_PER_PORT" ] ; then - PHYS_PER_PORT=$(awk '$1 == "phys_per_port" \ - {print $2; exit}' $CONFIG) - fi - PHYS_PER_PORT=${PHYS_PER_PORT:-4} - - if ! echo "$PHYS_PER_PORT" | grep -q -E '^[0-9]+$' ; then - echo "Error: phys_per_port value $PHYS_PER_PORT is non-numeric" - exit 1 - fi - - if [ -z "$MULTIPATH_MODE" ] ; then - MULTIPATH_MODE=$(awk '$1 == "multipath" \ - {print $2; exit}' $CONFIG) - fi - - # Use first running component device if we're handling a dm-mpath device - if [ "$MULTIPATH_MODE" = "yes" ] ; then - # If udev didn't tell us the UUID via DM_NAME, check /dev/mapper - if [ -z "$DM_NAME" ] ; then - DM_NAME=$(ls -l --full-time /dev/mapper | - grep "$DEV"$ | awk '{print $9}') - fi - - # For raw disks udev exports DEVTYPE=partition when - # handling partitions, and the rules can be written to - # take advantage of this to append a -part suffix. For - # dm devices we get DEVTYPE=disk even for partitions so - # we have to append the -part suffix directly in the - # helper. - if [ "$DEVTYPE" != "partition" ] ; then - # Match p[number], remove the 'p' and prepend "-part" - PART=$(echo "$DM_NAME" | - awk 'match($0,/p[0-9]+$/) {print "-part"substr($0,RSTART+1,RLENGTH-1)}') - fi - - # Strip off partition information. - DM_NAME=$(echo "$DM_NAME" | sed 's/p[0-9][0-9]*$//') - if [ -z "$DM_NAME" ] ; then - return - fi - - # Get the raw scsi device name from multipath -ll. Strip off - # leading pipe symbols to make field numbering consistent. - DEV=$(multipath -ll "$DM_NAME" | - awk '/running/{gsub("^[|]"," "); print $3 ; exit}') - if [ -z "$DEV" ] ; then - return - fi - fi - - if echo "$DEV" | grep -q ^/devices/ ; then - sys_path=$DEV - else - sys_path=$(udevadm info -q path -p "/sys/block/$DEV" 2>/dev/null) - fi - - # expect sys_path like this, for example: - # /devices/pci0000:00/0000:00:0b.0/0000:09:00.0/0000:0a:05.0/0000:0c:00.0/host3/target3:1:0/3:1:0:21/block/sdv - - # Use positional parameters as an ad-hoc array - set -- $(echo "$sys_path" | tr / ' ') - num_dirs=$# - scsi_host_dir="/sys" - - # Get path up to /sys/.../hostX - i=1 - - while [ $i -le "$num_dirs" ] ; do - d=$(eval echo '$'{$i}) - scsi_host_dir="$scsi_host_dir/$d" - - echo "$d" | grep -q -E '^host[0-9]+$' && break - i=$((i + 1)) - done - - if [ $i = "$num_dirs" ] ; then - return - fi - - PCI_ID=$(eval echo '$'{$((i -1))} | awk -F: '{print $2":"$3}') - - # In scsi mode, the directory two levels beneath - # /sys/.../hostX reveals the port and slot. - port_dir=$scsi_host_dir - j=$((i + 2)) - - i=$((i + 1)) - while [ $i -le $j ] ; do - port_dir="$port_dir/$(eval echo '$'{$i})" - i=$((i + 1)) - done - - set -- $(echo "$port_dir" | sed -e 's/^.*:\([^:]*\):\([^:]*\)$/\1 \2/') - PORT=$1 - SLOT=$(($2 + FIRST_BAY_NUMBER)) - - if [ -z "$SLOT" ] ; then - return - fi - - CHAN=$(map_channel "$PCI_ID" "$PORT") - SLOT=$(map_slot "$SLOT" "$CHAN") - - if [ -z "$CHAN" ] ; then - return - fi - echo "${CHAN}${SLOT}${PART}" -} - -# Figure out the name for the enclosure symlink -enclosure_handler () { - # We get all the info we need from udev's DEVPATH variable: - # - # DEVPATH=/sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0/host0/subsystem/devices/0:0:0:0/scsi_generic/sg0 - - # Get the enclosure ID ("0:0:0:0") - ENC="${DEVPATH%/*}" - ENC="${ENC%/*}" - ENC="${ENC##*/}" - if [ ! -d "/sys/class/enclosure/$ENC" ] ; then - # Not an enclosure, bail out - return - fi - - # Get the long sysfs device path to our enclosure. Looks like: - # /devices/pci0000:00/0000:00:03.0/0000:05:00.0/host0/port-0:0/ ... /enclosure/0:0:0:0 - - ENC_DEVICE=$(readlink "/sys/class/enclosure/$ENC") - - # Grab the full path to the hosts port dir: - # /devices/pci0000:00/0000:00:03.0/0000:05:00.0/host0/port-0:0 - PORT_DIR=$(echo "$ENC_DEVICE" | grep -Eo '.+host[0-9]+/port-[0-9]+:[0-9]+') - - # Get the port number - PORT_ID=$(echo "$PORT_DIR" | grep -Eo "[0-9]+$") - - # The PCI directory is two directories up from the port directory - # /sys/devices/pci0000:00/0000:00:03.0/0000:05:00.0 - PCI_ID_LONG="$(readlink -m "/sys/$PORT_DIR/../..")" - PCI_ID_LONG="${PCI_ID_LONG##*/}" - - # Strip down the PCI address from 0000:05:00.0 to 05:00.0 - PCI_ID="${PCI_ID_LONG#[0-9]*:}" - - # Name our device according to vdev_id.conf (like "L0" or "U1"). - NAME=$(awk "/channel/{if (\$1 == \"channel\" && \$2 == \"$PCI_ID\" && \ - \$3 == \"$PORT_ID\") {print \$4\$3}}" $CONFIG) - - echo "${NAME}" -} - -alias_handler () { - # Special handling is needed to correctly append a -part suffix - # to partitions of device mapper devices. The DEVTYPE attribute - # is normally set to "disk" instead of "partition" in this case, - # so the udev rules won't handle that for us as they do for - # "plain" block devices. - # - # For example, we may have the following links for a device and its - # partitions, - # - # /dev/disk/by-id/dm-name-isw_dibgbfcije_ARRAY0 -> ../../dm-0 - # /dev/disk/by-id/dm-name-isw_dibgbfcije_ARRAY0p1 -> ../../dm-1 - # /dev/disk/by-id/dm-name-isw_dibgbfcije_ARRAY0p2 -> ../../dm-3 - # - # and the following alias in vdev_id.conf. - # - # alias A0 dm-name-isw_dibgbfcije_ARRAY0 - # - # The desired outcome is for the following links to be created - # without having explicitly defined aliases for the partitions. - # - # /dev/disk/by-vdev/A0 -> ../../dm-0 - # /dev/disk/by-vdev/A0-part1 -> ../../dm-1 - # /dev/disk/by-vdev/A0-part2 -> ../../dm-3 - # - # Warning: The following grep pattern will misidentify whole-disk - # devices whose names end with 'p' followed by a string of - # digits as partitions, causing alias creation to fail. This - # ambiguity seems unavoidable, so devices using this facility - # must not use such names. - DM_PART= - if echo "$DM_NAME" | grep -q -E 'p[0-9][0-9]*$' ; then - if [ "$DEVTYPE" != "partition" ] ; then - # Match p[number], remove the 'p' and prepend "-part" - DM_PART=$(echo "$DM_NAME" | - awk 'match($0,/p[0-9]+$/) {print "-part"substr($0,RSTART+1,RLENGTH-1)}') - fi - fi - - # DEVLINKS attribute must have been populated by already-run udev rules. - for link in $DEVLINKS ; do - # Remove partition information to match key of top-level device. - if [ -n "$DM_PART" ] ; then - link=$(echo "$link" | sed 's/p[0-9][0-9]*$//') - fi - # Check both the fully qualified and the base name of link. - for l in $link ${link##*/} ; do - if [ ! -z "$l" ]; then - alias=$(awk -v var="$l" '($1 == "alias") && \ - ($3 == var) \ - { print $2; exit }' $CONFIG) - if [ -n "$alias" ] ; then - echo "${alias}${DM_PART}" - return - fi - fi - done - done -} - -# main -while getopts 'c:d:eg:jmp:h' OPTION; do - case ${OPTION} in - c) - CONFIG=${OPTARG} - ;; - d) - DEV=${OPTARG} - ;; - e) - # When udev sees a scsi_generic device, it calls this script with -e to - # create the enclosure device symlinks only. We also need - # "enclosure_symlinks yes" set in vdev_id.config to actually create the - # symlink. - ENCLOSURE_MODE=$(awk '{if ($1 == "enclosure_symlinks") \ - print $2}' "$CONFIG") - - if [ "$ENCLOSURE_MODE" != "yes" ] ; then - exit 0 - fi - ;; - g) - TOPOLOGY=$OPTARG - ;; - p) - PHYS_PER_PORT=${OPTARG} - ;; - j) - MULTIJBOD_MODE=yes - ;; - m) - MULTIPATH_MODE=yes - ;; - h) - usage - ;; - esac -done - -if [ ! -r "$CONFIG" ] ; then - echo "Error: Config file \"$CONFIG\" not found" - exit 1 -fi - -if [ -z "$DEV" ] && [ -z "$ENCLOSURE_MODE" ] ; then - echo "Error: missing required option -d" - exit 1 -fi - -if [ -z "$TOPOLOGY" ] ; then - TOPOLOGY=$(awk '($1 == "topology") {print $2; exit}' "$CONFIG") -fi - -if [ -z "$BAY" ] ; then - BAY=$(awk '($1 == "slot") {print $2; exit}' "$CONFIG") -fi - -TOPOLOGY=${TOPOLOGY:-sas_direct} - -# Should we create /dev/by-enclosure symlinks? -if [ "$ENCLOSURE_MODE" = "yes" ] && [ "$TOPOLOGY" = "sas_direct" ] ; then - ID_ENCLOSURE=$(enclosure_handler) - if [ -z "$ID_ENCLOSURE" ] ; then - exit 0 - fi - - # Just create the symlinks to the enclosure devices and then exit. - ENCLOSURE_PREFIX=$(awk '/enclosure_symlinks_prefix/{print $2}' "$CONFIG") - if [ -z "$ENCLOSURE_PREFIX" ] ; then - ENCLOSURE_PREFIX="enc" - fi - echo "ID_ENCLOSURE=$ID_ENCLOSURE" - echo "ID_ENCLOSURE_PATH=by-enclosure/$ENCLOSURE_PREFIX-$ID_ENCLOSURE" - exit 0 -fi - -# First check if an alias was defined for this device. -ID_VDEV=$(alias_handler) - -if [ -z "$ID_VDEV" ] ; then - BAY=${BAY:-bay} - case $TOPOLOGY in - sas_direct|sas_switch) - ID_VDEV=$(sas_handler) - ;; - scsi) - ID_VDEV=$(scsi_handler) - ;; - *) - echo "Error: unknown topology $TOPOLOGY" - exit 1 - ;; - esac -fi - -if [ -n "$ID_VDEV" ] ; then - echo "ID_VDEV=${ID_VDEV}" - echo "ID_VDEV_PATH=disk/by-vdev/${ID_VDEV}" -fi diff --git a/cmd/zfs_ids_to_path/zfs_ids_to_path.c b/cmd/zfs_ids_to_path.c index 1d3bb6b29..1d3bb6b29 100644 --- a/cmd/zfs_ids_to_path/zfs_ids_to_path.c +++ b/cmd/zfs_ids_to_path.c diff --git a/cmd/zfs_ids_to_path/Makefile.am b/cmd/zfs_ids_to_path/Makefile.am deleted file mode 100644 index 09ddd8116..000000000 --- a/cmd/zfs_ids_to_path/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -sbin_PROGRAMS += zfs_ids_to_path -CPPCHECKTARGETS += zfs_ids_to_path - -zfs_ids_to_path_SOURCES = \ - %D%/zfs_ids_to_path.c - -zfs_ids_to_path_LDADD = \ - libzfs.la diff --git a/cmd/zgenhostid/zgenhostid.c b/cmd/zgenhostid.c index 853931c6a..853931c6a 100644 --- a/cmd/zgenhostid/zgenhostid.c +++ b/cmd/zgenhostid.c diff --git a/cmd/zgenhostid/Makefile.am b/cmd/zgenhostid/Makefile.am deleted file mode 100644 index 722950eb7..000000000 --- a/cmd/zgenhostid/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -sbin_PROGRAMS += zgenhostid -CPPCHECKTARGETS += zgenhostid - -zgenhostid_SOURCES = \ - %D%/zgenhostid.c diff --git a/cmd/zhack/zhack.c b/cmd/zhack.c index 71a2c5ae6..71a2c5ae6 100644 --- a/cmd/zhack/zhack.c +++ b/cmd/zhack.c diff --git a/cmd/zhack/Makefile.am b/cmd/zhack/Makefile.am deleted file mode 100644 index 94fa76d14..000000000 --- a/cmd/zhack/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -zhack_CPPFLAGS = $(AM_CPPFLAGS) $(FORCEDEBUG_CPPFLAGS) - -sbin_PROGRAMS += zhack -CPPCHECKTARGETS += zhack - -zhack_SOURCES = \ - %D%/zhack.c - -zhack_LDADD = \ - libzpool.la \ - libzfs_core.la \ - libnvpair.la diff --git a/cmd/ztest/ztest.c b/cmd/ztest.c index d60422279..d60422279 100644 --- a/cmd/ztest/ztest.c +++ b/cmd/ztest.c diff --git a/cmd/ztest/Makefile.am b/cmd/ztest/Makefile.am deleted file mode 100644 index e27643a44..000000000 --- a/cmd/ztest/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -ztest_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) -# Get rid of compiler warning for unchecked truncating snprintfs on gcc 7.1.1 -ztest_CFLAGS += $(NO_FORMAT_TRUNCATION) -ztest_CPPFLAGS = $(AM_CPPFLAGS) $(FORCEDEBUG_CPPFLAGS) - -sbin_PROGRAMS += ztest -CPPCHECKTARGETS += ztest - -ztest_SOURCES = \ - %D%/ztest.c - -ztest_LDADD = \ - libzpool.la \ - libzfs_core.la \ - libnvpair.la - -ztest_LDADD += -lm -ztest_LDFLAGS = -pthread diff --git a/cmd/zvol_id/Makefile.am b/cmd/zvol_id/Makefile.am deleted file mode 100644 index 7ba13205b..000000000 --- a/cmd/zvol_id/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -udev_PROGRAMS += zvol_id -CPPCHECKTARGETS += zvol_id - -zvol_id_SOURCES = \ - %D%/zvol_id_main.c diff --git a/cmd/zvol_id/zvol_id_main.c b/cmd/zvol_id/zvol_id_main.c deleted file mode 100644 index 929a1a6e7..000000000 --- a/cmd/zvol_id/zvol_id_main.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright (c) 2011, Fajar A. Nugraha. All rights reserved. - * Use is subject to license terms. - */ - -#include <ctype.h> -#include <string.h> -#include <stdio.h> -#include <stdlib.h> -#include <fcntl.h> -#include <unistd.h> -#include <linux/ioctl.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <sys/zfs_znode.h> -#include <sys/fs/zfs.h> - -#if defined(ZFS_ASAN_ENABLED) -/* - * zvol_id is invoked by udev with the help of ptrace() - * making sanitized binary with leak detection croak - * because of tracing mechanisms collision - */ -extern const char *__asan_default_options(void); - -const char *__asan_default_options(void) { - return ("abort_on_error=true:halt_on_error=true:" - "allocator_may_return_null=true:disable_coredump=false:" - "detect_stack_use_after_return=true:detect_leaks=false"); -} -#endif - -static int -ioctl_get_msg(char *var, int fd) -{ - int ret; - char msg[ZFS_MAX_DATASET_NAME_LEN]; - - ret = ioctl(fd, BLKZNAME, msg); - if (ret < 0) { - return (ret); - } - - snprintf(var, ZFS_MAX_DATASET_NAME_LEN, "%s", msg); - return (ret); -} - -int -main(int argc, char **argv) -{ - int fd = -1, ret = 0, status = EXIT_FAILURE; - char zvol_name[ZFS_MAX_DATASET_NAME_LEN]; - char *zvol_name_part = NULL; - char *dev_name; - struct stat64 statbuf; - int dev_minor, dev_part; - int i; - - if (argc < 2) { - fprintf(stderr, "Usage: %s /dev/zvol_device_node\n", argv[0]); - goto fail; - } - - dev_name = argv[1]; - ret = stat64(dev_name, &statbuf); - if (ret != 0) { - fprintf(stderr, "Unable to access device file: %s\n", dev_name); - goto fail; - } - - dev_minor = minor(statbuf.st_rdev); - dev_part = dev_minor % ZVOL_MINORS; - - fd = open(dev_name, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "Unable to open device file: %s\n", dev_name); - goto fail; - } - - ret = ioctl_get_msg(zvol_name, fd); - if (ret < 0) { - fprintf(stderr, "ioctl_get_msg failed: %s\n", strerror(errno)); - goto fail; - } - if (dev_part > 0) - ret = asprintf(&zvol_name_part, "%s-part%d", zvol_name, - dev_part); - else - ret = asprintf(&zvol_name_part, "%s", zvol_name); - - if (ret == -1 || zvol_name_part == NULL) - goto fail; - - for (i = 0; i < strlen(zvol_name_part); i++) { - if (isblank(zvol_name_part[i])) - zvol_name_part[i] = '+'; - } - - printf("%s\n", zvol_name_part); - status = EXIT_SUCCESS; - -fail: - if (zvol_name_part) - free(zvol_name_part); - if (fd >= 0) - close(fd); - - return (status); -} diff --git a/cmd/zvol_wait/zvol_wait b/cmd/zvol_wait index f1fa42e27..f1fa42e27 100755 --- a/cmd/zvol_wait/zvol_wait +++ b/cmd/zvol_wait diff --git a/cmd/zvol_wait/Makefile.am b/cmd/zvol_wait/Makefile.am deleted file mode 100644 index 2d3736f75..000000000 --- a/cmd/zvol_wait/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -dist_bin_SCRIPTS += %D%/zvol_wait -SHELLCHECKSCRIPTS += %D%/zvol_wait |