The branch stable/14 has been updated by olce:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c6a65bbee6959f50fa9313c63f31ff6e815b48d4

commit c6a65bbee6959f50fa9313c63f31ff6e815b48d4
Author:     Olivier Certner <o...@freebsd.org>
AuthorDate: 2024-05-21 14:23:32 +0000
Commit:     Olivier Certner <o...@freebsd.org>
CommitDate: 2025-07-28 13:28:21 +0000

    zfs: spa: ZIO_TASKQ_ISSUE: Use symbolic priority
    
    This allows to change the meaning of priority differences in FreeBSD
    without requiring code changes in ZFS.
    
    MFC after:      1 month
    Event:          Kitchener-Waterloo Hackathon 202506
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D45390
    
    (cherry picked from commit fd141584cf89d7d24543ef5be83c6927a5d67ffa)
---
 .../openzfs/include/os/freebsd/spl/sys/proc.h       |  4 +++-
 .../openzfs/include/os/linux/spl/sys/sysmacros.h    |  4 +++-
 sys/contrib/openzfs/include/sys/zfs_context.h       |  4 +++-
 sys/contrib/openzfs/module/zfs/spa.c                | 21 +++------------------
 4 files changed, 12 insertions(+), 21 deletions(-)

diff --git a/sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h 
b/sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h
index 96ba10e5679e..0d02a826870c 100644
--- a/sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h
+++ b/sys/contrib/openzfs/include/os/freebsd/spl/sys/proc.h
@@ -44,7 +44,9 @@
 #ifdef _KERNEL
 #define        CPU             curcpu
 #define        minclsyspri     PRIBIO
-#define        defclsyspri minclsyspri
+#define        defclsyspri     minclsyspri
+/* Write issue taskq priority. */
+#define        wtqclsyspri     ((PVM + PRIBIO) / 2)
 #define        maxclsyspri     PVM
 #define        max_ncpus       (mp_maxid + 1)
 #define        boot_max_ncpus  (mp_maxid + 1)
diff --git a/sys/contrib/openzfs/include/os/linux/spl/sys/sysmacros.h 
b/sys/contrib/openzfs/include/os/linux/spl/sys/sysmacros.h
index 0e8390736309..96bb01e81541 100644
--- a/sys/contrib/openzfs/include/os/linux/spl/sys/sysmacros.h
+++ b/sys/contrib/openzfs/include/os/linux/spl/sys/sysmacros.h
@@ -91,8 +91,10 @@
  * Treat shim tasks as SCHED_NORMAL tasks
  */
 #define        minclsyspri                     (MAX_PRIO-1)
-#define        maxclsyspri                     (MAX_RT_PRIO)
 #define        defclsyspri                     (DEFAULT_PRIO)
+/* Write issue taskq priority. */
+#define        wtqclsyspri                     (MAX_RT_PRIO + 1)
+#define        maxclsyspri                     (MAX_RT_PRIO)
 
 #ifndef NICE_TO_PRIO
 #define        NICE_TO_PRIO(nice)              (MAX_RT_PRIO + (nice) + 20)
diff --git a/sys/contrib/openzfs/include/sys/zfs_context.h 
b/sys/contrib/openzfs/include/sys/zfs_context.h
index 5dedb14c7fb5..accfa3d9da9f 100644
--- a/sys/contrib/openzfs/include/sys/zfs_context.h
+++ b/sys/contrib/openzfs/include/sys/zfs_context.h
@@ -620,8 +620,10 @@ extern void delay(clock_t ticks);
  * Process priorities as defined by setpriority(2) and getpriority(2).
  */
 #define        minclsyspri     19
-#define        maxclsyspri     -20
 #define        defclsyspri     0
+/* Write issue taskq priority. */
+#define        wtqclsyspri     -19
+#define        maxclsyspri     -20
 
 #define        CPU_SEQID       ((uintptr_t)pthread_self() & (max_ncpus - 1))
 #define        CPU_SEQID_UNSTABLE      CPU_SEQID
diff --git a/sys/contrib/openzfs/module/zfs/spa.c 
b/sys/contrib/openzfs/module/zfs/spa.c
index 886867b739f0..b140f55af973 100644
--- a/sys/contrib/openzfs/module/zfs/spa.c
+++ b/sys/contrib/openzfs/module/zfs/spa.c
@@ -1114,29 +1114,14 @@ spa_taskqs_init(spa_t *spa, zio_type_t t, 
zio_taskq_type_t q)
                        tq = taskq_create_sysdc(name, value, 50, INT_MAX,
                            spa->spa_proc, zio_taskq_basedc, flags);
                } else {
-                       pri_t pri = maxclsyspri;
                        /*
                         * The write issue taskq can be extremely CPU
                         * intensive.  Run it at slightly less important
                         * priority than the other taskqs.
-                        *
-                        * Under Linux and FreeBSD this means incrementing
-                        * the priority value as opposed to platforms like
-                        * illumos where it should be decremented.
-                        *
-                        * On FreeBSD, if priorities divided by four (RQ_PPQ)
-                        * are equal then a difference between them is
-                        * insignificant.
                         */
-                       if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE) {
-#if defined(__linux__)
-                               pri++;
-#elif defined(__FreeBSD__)
-                               pri += 4;
-#else
-#error "unknown OS"
-#endif
-                       }
+                       const pri_t pri = (t == ZIO_TYPE_WRITE &&
+                           q == ZIO_TASKQ_ISSUE) ?
+                           wtqclsyspri : maxclsyspri;
                        tq = taskq_create_proc(name, value, pri, 50,
                            INT_MAX, spa->spa_proc, flags);
                }

Reply via email to