After downloading the firmware to a device, it's inquiry data likely will change. Force a rescan of the target with the CAM_EXPECT_INQ_CHANGE flag to get it to record the new inqury data as being expected. This avoids the need for a 'camcontrol rescan' on the device which detaches and re-attaches the disk (da, ada) device. This brings fwdownload up to nvmecontrol's ability to do the same thing w/o changing the exposed nvme/nvd/nda device. We scan the target and not the LUN because dual actuator drives have multiple LUNs, but the firmware is global across many vendors' drives (and the so far theoretical ones that aren't won't be harmed by the rescan). Since the underlying struct disk is now preserved accross this operation, it's now possible to upgrade firmware of a root device w/o crashing the system. On systems that are quite busy, the worst that happens is that certain operaions are reported cancelled when the new firmware is activated. These operations are retried with the normal CAM recovery mechanisms and will work on the retry. The only visible hiccup is the time that new firmware is flashing / initializing. One should not consider this operation completely risk free, however, since not all drives are well behaved after a firmware download. MFC After: 1 week Relnotes: yes Sponsored by: Netflix Feedback by: mav Differential Revision: https://reviews.freebsd.org/D34325
FreeBSD Source:
This is the top level of the FreeBSD source directory.
FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.
For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.
The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), FreeBSD handbook on building userland, and Handbook for kernels for more information, including setting make(1) variables.
Source Roadmap:
Directory | Description |
---|---|
bin | System/user commands. |
cddl | Various commands and libraries under the Common Development and Distribution License. |
contrib | Packages contributed by 3rd parties. |
crypto | Cryptography stuff (see crypto/README). |
etc | Template files for /etc. |
gnu | Commands and libraries under the GNU General Public License (GPL) or Lesser General Public License (LGPL). Please see gnu/COPYING and gnu/COPYING.LIB for more information. |
include | System include files. |
kerberos5 | Kerberos5 (Heimdal) package. |
lib | System libraries. |
libexec | System daemons. |
release | Release building Makefile & associated tools. |
rescue | Build system for statically linked /rescue utilities. |
sbin | System commands. |
secure | Cryptographic libraries and commands. |
share | Shared resources. |
stand | Boot loader sources. |
sys | Kernel sources. |
sys/arch /conf |
Kernel configuration files. GENERIC is the configuration used in release builds. NOTES contains documentation of all possible entries. |
tests | Regression tests which can be run by Kyua. See tests/README for additional information. |
tools | Utilities for regression testing and miscellaneous tasks. |
usr.bin | User commands. |
usr.sbin | System administration commands. |
For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see FreeBSD Handbook.