]> git.proxmox.com Git - zfsonlinux.git/commitdiff
trim: determine if a device uses nvme transport with lsblk (Closes: #990745)
authorStoiko Ivanov <s.ivanov@proxmox.com>
Tue, 4 Oct 2022 13:47:59 +0000 (15:47 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 4 Oct 2022 14:06:34 +0000 (16:06 +0200)
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 <s.ivanov@proxmox.com>
debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim

index 5b6305b07a9a81c0556b582f62afc389327a2fba..91d00bb0c90f85efeb2076695c3d47a016658277 100755 (executable)
@@ -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.