#
5c59cec2 |
| 09-Jul-2025 |
John Baldwin <jhb@FreeBSD.org> |
nvmf: Auto-reconnect periodically after a disconnect
Use a timer in the nvmf(4) driver to periodically trigger a devctl "RECONNECT" notification. A trigger in the /etc/devd/nvmf.conf file invokes "
nvmf: Auto-reconnect periodically after a disconnect
Use a timer in the nvmf(4) driver to periodically trigger a devctl "RECONNECT" notification. A trigger in the /etc/devd/nvmf.conf file invokes "nvmecontrol reconnect nvmeX" upon each notification. This differs from iSCSI which uses a dedicated daemon (iscsid(8)) to wait inside a custom ioctl for an iSCSI initiator event to occur, but I think this design might be simpler.
Similar to nvme-cli, the interval between reconnection attempts is specified in seconds by the --reconnect-delay argument to the connect and reconnect commands. Note that nvme-cli uses -c for short letter of this command, but that was already taken so nvmecontrol uses -r. The default is 10 seconds to match Linux.
In addition, a second timeout can be used to force a full detach of a disconnected the nvmeX device after the controller loss timeout expires. The timeout for this is specified in seconds by the --ctrl-loss-tmo/-l options (identical to nvme-cli). The default is 600 seconds.
Either of these timers can be disabled by setting the timer to 0. In that case, the associated action (devctl notifications or full detach) will not occur after a disconnect.
Note that this adds a dedicated taskqueue for nvmf tasks instead of using taskqueue_thread as the controller loss task could deadlock waiting for the completion of other tasks queued to taskqueue_thread. (Specifically, tearing down the CAM SIM can trigger destroy_dev_sched_cb() and waits for the callback to run, but the callback is scheduled to run in a task on taskqueue_thread. Possibly, destroy_dev_sched should be using a dedicated taskqueue.)
Reviewed by: imp (earlier version) Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D50222
show more ...
|
Revision tags: release/14.3.0-p1, release/14.2.0-p4, release/13.5.0-p2, release/14.3.0, release/13.4.0-p5, release/13.5.0-p1, release/14.2.0-p3, release/13.5.0, release/14.2.0-p2, release/14.1.0-p8, release/13.4.0-p4 |
|
#
38e10839 |
| 31-Jan-2025 |
John Baldwin <jhb@FreeBSD.org> |
nvmf: Add NVMF_CONNECTION_STATUS ioctl
This returns an nvlist indicating if a Fabrics host is connected and the time of the most recent disconnection.
Reviewed by: imp Sponsored by: Chelsio Communi
nvmf: Add NVMF_CONNECTION_STATUS ioctl
This returns an nvlist indicating if a Fabrics host is connected and the time of the most recent disconnection.
Reviewed by: imp Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D48219
show more ...
|
Revision tags: release/14.1.0-p7, release/14.2.0-p1, release/13.4.0-p3 |
|
#
8bba2c0f |
| 24-Jan-2025 |
John Baldwin <jhb@FreeBSD.org> |
nvmf: Refactor reconnection support
Save more data associated with a new association including the network address of the remote controller. This permits reconnecting an association without providi
nvmf: Refactor reconnection support
Save more data associated with a new association including the network address of the remote controller. This permits reconnecting an association without providing the address or other details. To use this new mode, provide only an existing device ID to nvmecontrol's reconnect command. An address can still be provided to request a different address or other different settings for the new association.
The saved data includes an entire Discovery Log page entry to aim to be compatible with other transports in the future. When a remote controller is connected to via a Discovery Log page entry (nvmecontrol connect-all), the raw entry is used. When a remote controller is connected to via an explicit address, an entry is synthesized from the parameters.
Note that this is a pseudo-ABI break for the ioctls used by nvmf(4) in that the nvlists for handoff and reconnect now use a slightly different set of elements. Since this is only present in main I did not bother implementing compatability shims.
Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D48214
show more ...
|
#
365b89e8 |
| 30-Dec-2024 |
John Baldwin <jhb@FreeBSD.org> |
nvmf: Switch several ioctls to using nvlists
For requests that handoff queues from userspace to the kernel as well as the request to fetch reconnect parameters from the kernel, switch from using fla
nvmf: Switch several ioctls to using nvlists
For requests that handoff queues from userspace to the kernel as well as the request to fetch reconnect parameters from the kernel, switch from using flat structures to nvlists. In particular, this will permit adding support for additional transports in the future without breaking the ABI of the structures.
Note that this is an ABI break for the ioctls used by nvmf(4) and nvmft(4). Since this is only present in main I did not bother implementing compatability shims.
Inspired by: imp (suggestion on a different review) Reviewed by: imp Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D48230
show more ...
|
Revision tags: release/14.2.0, release/13.4.0, release/14.1.0 |
|
#
d86edc18 |
| 03-May-2024 |
John Baldwin <jhb@FreeBSD.org> |
nvmf.h: New header defining ioctls for NVMe over Fabrics
This defines structures, ioctl commands, and related constants used for both the Fabrics host and controller.
Reviewed by: imp Sponsored by:
nvmf.h: New header defining ioctls for NVMe over Fabrics
This defines structures, ioctl commands, and related constants used for both the Fabrics host and controller.
Reviewed by: imp Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D44706
show more ...
|