Date: Tue, 3 May 2022 20:50:46 GMT From: Alexander Motin <mav@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 84849cfd1dc0 - stable/13 - CAM: Keep periph_links when restoring CCB in camperiphdone(). Message-ID: <202205032050.243KokiS033932@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=84849cfd1dc016917402511bc5a55d3d7317ce39 commit 84849cfd1dc016917402511bc5a55d3d7317ce39 Author: Alexander Motin <mav@FreeBSD.org> AuthorDate: 2022-04-28 01:39:50 +0000 Commit: Alexander Motin <mav@FreeBSD.org> CommitDate: 2022-05-03 20:32:45 +0000 CAM: Keep periph_links when restoring CCB in camperiphdone(). While recovery command executed, some other commands from the periph may complete, that may affect periph_links of this CCB. So restoring original CCB we must keep current periph_links as more up to date. I've found this triggering assertions with debug kernel and suspect some memory corruptions otherwise when spun down disk receives two or sometimes more concurrent requests. MFC after: 1 week Sponsored by: iXsystems, Inc. (cherry picked from commit 404f001161b975164d8b52d9f404d07ac7584027) --- sys/cam/cam_periph.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c index d08adca0ea1c..9a4f4a2b160b 100644 --- a/sys/cam/cam_periph.c +++ b/sys/cam/cam_periph.c @@ -1421,6 +1421,7 @@ camperiphdone(struct cam_periph *periph, union ccb *done_ccb) * and the result will be the final one returned to the CCB owher. */ saved_ccb = (union ccb *)done_ccb->ccb_h.saved_ccb_ptr; + saved_ccb->ccb_h.periph_links = done_ccb->ccb_h.periph_links; bcopy(saved_ccb, done_ccb, sizeof(*done_ccb)); xpt_free_ccb(saved_ccb); if (done_ccb->ccb_h.cbfcnp != camperiphdone)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202205032050.243KokiS033932>