⬢ DragonFlyBSD Kernel Audit
DF-4616 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/ips/ips.c b/sys/dev/raid/ips/ips.c
index 1111111..2222222 100644
--- a/sys/dev/raid/ips/ips.c
+++ b/sys/dev/raid/ips/ips.c
@@ -608,7 +608,11 @@ void
 ips_morpheus_poll(ips_command_t *command)
 {
 	uint32_t ts;
 
-	ts = time_uptime + command->timeout;
+	/*
+	 * command->timeout counts watchdog ticks (1 tick = 10 s, see
+	 * ips_timeout/ips_issue_morpheus_cmd); time_uptime is seconds.
+	 * Scale the deadline to seconds or the dump poll gives up 10x early.
+	 */
+	ts = time_uptime + (uint32_t)command->timeout * 10;
 	while (command->timeout != 0 &&
 	    ips_morpheus_check_intr(command->sc) == 0 &&
 	    (ts > time_uptime))
 		DELAY(1000);