freebsd-dev/sys/geom
Alexander Motin 90bcc81bc3 Delay GEOM disk_create() until CAM periph probe completes.
Before this patch CAM periph drivers called both disk_alloc() and
disk_create() same time on periph creation.  But then prevented disks
from opening until the periph probe completion with cam_periph_hold().
As result, especially if disk misbehaves during the probe, GEOM event
thread, triggered to taste the disk, got blocked on open attempt,
potentially for a long time, unable to process other events.

This patch moves disk_create() call from periph creation to the end of
the probe. To allow disk_create() calls from non-sleepable CAM contexts
some of its duties requiring memory allocations are moved either back
to disk_alloc() or forward to g_disk_create(), so now disk_alloc() and
disk_add_alias() are the only disk methods that require sleeping.  If
disk fails during the probe disk_create() may just be skipped, going
directly to disk_destroy().  Other method calls during that time are
just ignored.  Since GEOM may now see the disks after CAM bus scan is
already completed, introduce per-periph boot hold functions. Enclosure
driver already had such mechanism, so just generalize it.

Reviewed by:	imp
MFC after:	1 month
Sponsored by:	iXsystems, Inc.
Differential Revision:	https://reviews.freebsd.org/D35784
2022-07-14 16:17:36 -04:00
..
bde geom(4): Fix some of the "set but not used" warnings 2021-12-18 11:42:34 +00:00
cache GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
concat GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
eli geli: Add a chicken switch for unmapped I/O 2022-04-18 17:55:24 -04:00
gate geom_gate: Distinguish between classes of errors 2022-01-29 21:15:51 +11:00
journal GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
label glabel: Set G_CF_DIRECT_SEND/RECEIVE for taste consumer. 2022-01-28 14:22:41 -05:00
linux_lvm GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
mirror GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
mountver Make g_attach() return ENXIO for orphaned providers; update various 2020-10-18 16:24:08 +00:00
multipath GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
nop kerneldump: remove physical argument from d_dumper 2022-05-13 10:42:48 -03:00
part gpart(8): Fix two typos in source code comments 2022-03-28 19:36:48 +02:00
raid kerneldump: remove physical from dump routines 2022-05-13 10:43:19 -03:00
raid3 GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
shsec GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
stripe GEOM: Set G_CF_DIRECT_SEND/RECEIVE for taste consumers. 2022-01-29 21:59:03 -05:00
union kerneldump: remove physical argument from d_dumper 2022-05-13 10:42:48 -03:00
uzip Make MAXPHYS tunable. Bump MAXPHYS to 1M. 2020-11-28 12:12:51 +00:00
vinum geom_vinum: fix set but not used warnings 2022-04-04 13:23:47 -08:00
virstor geom(4): Fix a common typo in a source code comment 2022-06-05 09:51:10 +02:00
zero geom(4): Mark all sysctls as CTLFLAG_MPSAFE. 2021-08-10 20:18:46 -04:00
geom_bsd_enc.c
geom_ccd.c sys/geom: Use C99 fixed-width integer types. 2021-12-28 09:41:51 -08:00
geom_ctl.c GEOM: Introduce partial confxml API 2022-03-12 11:55:52 -05:00
geom_ctl.h
geom_dbg.h GEOM: Reduce unnecessary log interleaving with sbufs 2019-08-07 19:28:35 +00:00
geom_dev.c ses: don't panic if disk elements have really weird descriptors 2022-06-23 11:19:20 -06:00
geom_disk.c Delay GEOM disk_create() until CAM periph probe completes. 2022-07-14 16:17:36 -04:00
geom_disk.h Delay GEOM disk_create() until CAM periph probe completes. 2022-07-14 16:17:36 -04:00
geom_dump.c GEOM: Introduce partial confxml API 2022-03-12 11:55:52 -05:00
geom_event.c GEOM: Minor polishing in geom_event. 2021-12-27 21:01:08 -05:00
geom_flashmap.c
geom_flashmap.h geom: clean up empty lines in .c and .h files 2020-09-01 22:14:09 +00:00
geom_int.h GEOM: Introduce partial confxml API 2022-03-12 11:55:52 -05:00
geom_io.c In GEOM debugging output, show consumer for cloned and duplicated bio's. 2022-01-30 17:21:13 -08:00
geom_kern.c GEOM: Relax direct dispatch for GEOM threads. 2022-01-28 14:21:21 -05:00
geom_map.c geom: clean up empty lines in .c and .h files 2020-09-01 22:14:09 +00:00
geom_redboot.c geom_map and geom_redboot: Remove unused ctlreq handler. 2020-07-26 22:30:01 +00:00
geom_slice.c Pass BIO_SPEEDUP through all the geom layers 2020-01-17 01:15:55 +00:00
geom_slice.h
geom_subr.c GEOM: Remove g_wait_sim. 2022-01-29 22:12:43 -05:00
geom_vfs.c g_vfs_done: Only report ENXIO once 2022-04-24 14:01:33 -06:00
geom_vfs.h
geom.h GEOM: Introduce partial confxml API 2022-03-12 11:55:52 -05:00
notes