aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRyan Moeller <[email protected]>2020-09-08 14:39:16 -0400
committerGitHub <[email protected]>2020-09-08 11:39:16 -0700
commitebc4b52369ea10a2ad3df03b679acdd077e45a48 (patch)
tree6c8edb64248be4458980ab4b47d8b0c6a0f6e407 /include
parent189272f78a775e3ef93499c21c8742c39ab36322 (diff)
Avoid possibility of division by zero
When hz > 1000, msec / (1000 / hz) results in division by zero. I found somewhere in FreeBSD using howmany(msec * hz, 1000) to convert ms to ticks, avoiding the potential for a zero in the divisor. Reviewed-by: Alexander Motin <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Ryan Moeller <[email protected]> Closes #10894
Diffstat (limited to 'include')
-rw-r--r--include/os/freebsd/zfs/sys/zfs_context_os.h2
-rw-r--r--include/sys/zfs_context.h6
2 files changed, 4 insertions, 4 deletions
diff --git a/include/os/freebsd/zfs/sys/zfs_context_os.h b/include/os/freebsd/zfs/sys/zfs_context_os.h
index b46c4aa7c..0316f93b2 100644
--- a/include/os/freebsd/zfs/sys/zfs_context_os.h
+++ b/include/os/freebsd/zfs/sys/zfs_context_os.h
@@ -72,7 +72,7 @@ extern struct mtx zfs_debug_mtx;
} \
} while (0)
-#define MSEC_TO_TICK(msec) ((msec) / (MILLISEC / hz))
+#define MSEC_TO_TICK(msec) (howmany((hrtime_t)(msec) * hz, MILLISEC))
extern int hz;
extern int tick;
typedef int fstrans_cookie_t;
diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h
index 8e16399e8..e33f52c17 100644
--- a/include/sys/zfs_context.h
+++ b/include/sys/zfs_context.h
@@ -602,9 +602,9 @@ typedef struct vsecattr {
extern void delay(clock_t ticks);
#define SEC_TO_TICK(sec) ((sec) * hz)
-#define MSEC_TO_TICK(msec) ((msec) / (MILLISEC / hz))
-#define USEC_TO_TICK(usec) ((usec) / (MICROSEC / hz))
-#define NSEC_TO_TICK(usec) ((usec) / (NANOSEC / hz))
+#define MSEC_TO_TICK(msec) (howmany((hrtime_t)(msec) * hz, MILLISEC))
+#define USEC_TO_TICK(usec) (howmany((hrtime_t)(usec) * hz, MICROSEC))
+#define NSEC_TO_TICK(nsec) (howmany((hrtime_t)(nsec) * hz, NANOSEC))
#define max_ncpus 64
#define boot_ncpus (sysconf(_SC_NPROCESSORS_ONLN))