summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsmh <smh@FreeBSD.org>2013-07-01 17:57:22 +0000
committersmh <smh@FreeBSD.org>2013-07-01 17:57:22 +0000
commitcab3cc571031cfdb601898df1b6e7c531d5f87ce (patch)
tree09bdca501bef4f8825dc59aacd5c65da8e3294b0
parentec861801466f999d46e6c5b894eb5be49a485ae3 (diff)
downloadFreeBSD-src-cab3cc571031cfdb601898df1b6e7c531d5f87ce.zip
FreeBSD-src-cab3cc571031cfdb601898df1b6e7c531d5f87ce.tar.gz
Remove forced timeout of in-flight commands from mfi_timeout.
While this prevents commands getting stuck forever there is no way to guarantee that data from the command hasn't been committed to the device. In addition older mfi firmware has a bug that would cause the controller to frequently stall IO for over our timeout value, which when combined with a forced timeout often resulted in panics in UFS; which would otherwise be avoided when the command eventually completed if left alone. For reference this timeout issue is resolved in Dell FW package 21.2.1-0000. Fixed FW package version for none Dell controller will likely vary. MFC after: 2 days
-rw-r--r--sys/dev/mfi/mfi.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/dev/mfi/mfi.c b/sys/dev/mfi/mfi.c
index cf2d505..b20ddc5 100644
--- a/sys/dev/mfi/mfi.c
+++ b/sys/dev/mfi/mfi.c
@@ -3773,12 +3773,15 @@ mfi_timeout(void *data)
MFI_PRINT_CMD(cm);
MFI_VALIDATE_CMD(sc, cm);
/*
- * Fail the command instead of leaving it on
- * the queue where it could remain stuck forever
+ * While commands can get stuck forever we do
+ * not fail them as there is no way to tell if
+ * the controller has actually processed them
+ * or not.
+ *
+ * In addition its very likely that force
+ * failing a command here would cause a panic
+ * e.g. in UFS.
*/
- mfi_remove_busy(cm);
- cm->cm_error = ETIMEDOUT;
- mfi_complete(sc, cm);
timedout++;
}
}
OpenPOWER on IntegriCloud