The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=824530a5c4fd59427cda0eae0a4ac85212814958
commit 824530a5c4fd59427cda0eae0a4ac85212814958 Author: Warner Losh <[email protected]> AuthorDate: 2026-03-03 18:00:15 +0000 Commit: Warner Losh <[email protected]> CommitDate: 2026-03-03 18:00:15 +0000 nda: Assume all cases in ndaasync can sleep The error recovery is nicer if we can wait for the tiny memory we need to send the messages when the physpath changes. Since we've moved the async handler into a sleepable context, we can wait for the allocation to complete since async events are rare enough and it's not an indefinite wait. Also add a comment about the scope of AC_ADVINFO_CHANGED for nvme drives. We could use it for broadcasting INDENTIFY changes in nvme drives. However, the underlying mechanisms in NVMe don't really allow for that (they are more fine-grained). So for namespace changes, for example, we'll send AC_GETDEV_CHANGED instead of a AC_ADVINFO_CHANGED. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D55523 --- sys/cam/nvme/nvme_da.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/cam/nvme/nvme_da.c b/sys/cam/nvme/nvme_da.c index a1114ffe8a44..be578bae5da5 100644 --- a/sys/cam/nvme/nvme_da.c +++ b/sys/cam/nvme/nvme_da.c @@ -782,11 +782,19 @@ ndaasync(void *callback_arg, uint32_t code, struct cam_path *path, void *arg) { uintptr_t buftype; + /* + * Note: In theory, we could send CDAI_TYPE_NVME_* events here, + * but instead the rescan code only sends more specific + * AC_GETDEV_CHANGED. There's no way to generically get + * notifications of changes to these structures from the drive + * (though we could notice with memcmp). The automation in NVME + * is at a much more granular level, so we leverage that. + */ softc = periph->softc; buftype = (uintptr_t)arg; if (buftype == CDAI_TYPE_PHYS_PATH) { disk_attr_changed(softc->disk, "GEOM::physpath", - M_NOWAIT); + M_WAITOK); } break; }
