diff options
author | smh <smh@FreeBSD.org> | 2013-07-01 17:57:22 +0000 |
---|---|---|
committer | smh <smh@FreeBSD.org> | 2013-07-01 17:57:22 +0000 |
commit | cab3cc571031cfdb601898df1b6e7c531d5f87ce (patch) | |
tree | 09bdca501bef4f8825dc59aacd5c65da8e3294b0 | |
parent | ec861801466f999d46e6c5b894eb5be49a485ae3 (diff) | |
download | FreeBSD-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.c | 13 |
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++; } } |