[Pkg-zfsonlinux-devel] Bug#986185: closed by Debian FTP Masters <ftpmaster at ftp-master.debian.org> (reply to Mo Zhou <lumin at debian.org>) (Bug#986185: fixed in zfs-linux 2.0.3-3)
наб
nabijaczleweli at nabijaczleweli.xyz
Fri Apr 2 11:20:28 BST 2021
This looks great, thanks! You've definitely taken the right approach here.
Just a few nitpicks, see diff:
* no need to call modprobe, just check sysfs directly
(this is what modprobe does anyway)
* the proper name for this is "periodic-{scrub,trim}" ‒
"periodical" really doesn't work here in modern use
* get_property() was overly complex ‒
if the pool doesn't exist, zfs-get already exits with 1,
so just bubble it up through "|| return 1" to appease -e;
if the property isn't set, it just returns 0 and prints "-",
which we already check
* I also touched the comment up and linked to the zpool userprops PR
Also, please add note of this to the NEWS file, something like
-- >8 --
Starting with this version, the auto-scrub and auto-trim jobs will use
the "org.debian:periodic-{scrub,trim}" user properties on the pool's
root dataset to determine if they should do anything; accepted values
are:
* "auto" ‒ same as unset, use default checks
* "enable" ‒ always scrub/trim automatically
* "disable" ‒ never scrub/trim automatically
.
The default for auto-scrub is to scrub, as before,
but the default for auto-trim has changed: it will now only trim
if the pool consists of /only/ NVMe drives, since some SATA 2
and SATA 3.0 SSDs will hang or crash during large TRIMs (#983086) ‒
if your pools with SATA SSDs had no problems trimming before,
you will need to run
zfs set org.debian:periodic-trim=enable sata-pool
to restore previous behaviour.
-- >8 --
would be great, feel free to just steal this.
Best,
наб
-------------- next part --------------
diff --git a/debian/tree/zfsutils-linux/usr/lib/zfs-linux/scrub b/debian/tree/zfsutils-linux/usr/lib/zfs-linux/scrub
index 91631cb18..cb4e3c07e 100755
--- a/debian/tree/zfsutils-linux/usr/lib/zfs-linux/scrub
+++ b/debian/tree/zfsutils-linux/usr/lib/zfs-linux/scrub
@@ -1,27 +1,19 @@
#!/bin/sh -eu
# directly exit successfully when zfs module is not loaded
-if modprobe -n -q --first-time zfs; then
+if ! [ -d /sys/module/zfs ]; then
exit 0
fi
# [auto] / enable / disable
-PROPERTY_NAME="org.debian:periodical-scrub"
+PROPERTY_NAME="org.debian:periodic-scrub"
get_property () {
- # Detect the ${PROPERTY_NAME} property from a given zpool
- # Note, we are abusing user-defined property on zpool root dataset
- # as "zpool user-defined property".
+ # Detect the ${PROPERTY_NAME} property on a given pool
+ # We are abusing user-defined properties on the root dataset,
+ # since they're not available on pools https://github.com/openzfs/zfs/pull/11680
pool=$1
- if ! zfs list -H -o name "${pool}" 1>/dev/null 2>/dev/null; then
- return 1 # failed to find the root dataset
- fi
- if ! zfs get -H -o value "${PROPERTY_NAME}" "${pool}" 1>/dev/null 2>/dev/null; then
- return 1 # no such property
- else
- # has such property
- zfs get -H -o value "${PROPERTY_NAME}" "${pool}"
- fi
+ zfs get -H -o value "${PROPERTY_NAME}" "${pool}" 2>/dev/null || return 1
}
scrub_if_not_scrub_in_progress () {
diff --git a/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim b/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim
index 585a58baf..5a0216507 100755
--- a/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim
+++ b/debian/tree/zfsutils-linux/usr/lib/zfs-linux/trim
@@ -1,27 +1,19 @@
-#!/bin/sh -e
+#!/bin/sh -eu
# directly exit successfully when zfs module is not loaded
-if modprobe -n -q --first-time zfs; then
+if ! [ -d /sys/module/zfs ]; then
exit 0
fi
# [auto] / enable / disable
-PROPERTY_NAME="org.debian:periodical-trim"
+PROPERTY_NAME="org.debian:periodic-trim"
get_property () {
- # Detect the ${PROPERTY_NAME} property from a given zpool
- # Note, we are abusing user-defined property on zpool root dataset
- # as "zpool user-defined property".
- pool=$1
- if ! zfs list -H -o name "${pool}" 1>/dev/null 2>/dev/null; then
- return 1 # failed to find the root dataset
- fi
- if ! zfs get -H -o value "${PROPERTY_NAME}" "${pool}" 1>/dev/null 2>/dev/null; then
- return 1 # no such property
- else
- # has such property
- zfs get -H -o value "${PROPERTY_NAME}" "${pool}"
- fi
+ # Detect the ${PROPERTY_NAME} property on a given pool
+ # We are abusing user-defined properties on the root dataset,
+ # since they're not available on pools https://github.com/openzfs/zfs/pull/11680
+ pool=$1
+ zfs get -H -o value "${PROPERTY_NAME}" "${pool}" 2>/dev/null || return 1
}
trim_if_not_already_trimming () {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-zfsonlinux-devel/attachments/20210402/a7b68cd4/attachment.sig>
More information about the Pkg-zfsonlinux-devel
mailing list