From: Stoiko Ivanov Date: Tue, 4 Oct 2022 13:47:59 +0000 (+0200) Subject: trim: determine if a device uses nvme transport with lsblk (Closes: #990745) X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=68b54bb6637114501b6a6def723d2ecdc0d4ddaa;p=zfsonlinux.git trim: determine if a device uses nvme transport with lsblk (Closes: #990745) Thanks to Miao Wang for get_transp() function (cherry picked from debian-upstream[0] commit 1f5433b15e4f7c823983bb90390c4b023f3d1948) [0] https://salsa.debian.org/zfsonlinux-team/zfs Signed-off-by: Stoiko Ivanov --- diff --git a/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim b/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim index 5b6305b..91d00bb 100755 --- a/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim +++ b/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim @@ -26,14 +26,33 @@ trim_if_not_already_trimming () { fi } +get_transp () { + local dev="$1" + local par_dev="$dev" + local pd + while true; do + pd=$(lsblk -dnr -o PKNAME "$par_dev") + if [ "$?" -ne 0 ]; then + return $? + fi + if [ -z "$pd" ]; then + break + else + par_dev="/dev/$pd" + fi + done + lsblk -dnr -o TRAN "$par_dev" +} + zpool_is_nvme_only () { zpool=$1 # get a list of devices attached to the specified zpool - zpool list -vHPL "${zpool}" | - awk -F'\t' '$2 ~ /^\/dev\// { - if($2 !~ /^\/dev\/nvme/) - exit 1 - }' + for x in $(zpool list -vHPL "${zpool}" |\ + awk -F'\t' '{if($2 ~ /^\/dev\//) print $2}'); do + if [ "$(get_transp $x)" != "nvme" ]; then + return 1 + fi + done } # TRIM all healthy pools that are not already trimming as per their configs.