git: c6efcb1281f3 - main - bhyve: Support setting the disk serial number for VirtIO block devices.

John Baldwin jhb at FreeBSD.org
Fri Sep 17 16:56:27 UTC 2021


The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=c6efcb1281f3518a92fdc579d2c3c3c74eb6070c

commit c6efcb1281f3518a92fdc579d2c3c3c74eb6070c
Author:     John Baldwin <jhb at FreeBSD.org>
AuthorDate: 2021-09-17 16:55:06 +0000
Commit:     John Baldwin <jhb at FreeBSD.org>
CommitDate: 2021-09-17 16:55:48 +0000

    bhyve: Support setting the disk serial number for VirtIO block devices.
    
    Reviewed by:    allanjude
    Obtained from:  illumos
    Differential Revision:  https://reviews.freebsd.org/D31983
---
 usr.sbin/bhyve/bhyve_config.5     | 12 +++++++++++-
 usr.sbin/bhyve/pci_virtio_block.c | 27 +++++++++++++++++----------
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/usr.sbin/bhyve/bhyve_config.5 b/usr.sbin/bhyve/bhyve_config.5
index a6f621048c1a..25bd818d6148 100644
--- a/usr.sbin/bhyve/bhyve_config.5
+++ b/usr.sbin/bhyve/bhyve_config.5
@@ -23,7 +23,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd April 20, 2021
+.Dd September 17, 2021
 .Dt BHYVE_CONFIG 5
 .Os
 .Sh NAME
@@ -514,6 +514,16 @@ The path of a directory on the host to export to the guest.
 .It Va ro Ta bool Ta false Ta
 If true, the guest filesystem is read-only.
 .El
+.Ss VirtIO Block Device Settings
+In addition to the block device settings described above, each
+VirtIO block device supports the following settings:
+.Bl -column "model" "integer" "generated"
+.It Sy Name Ta Sy Format Ta Sy Default Ta Sy Description
+.It Va ser Ta string Ta generated Ta
+Serial number of up to twenty characters.
+A default serial number is generated using a hash of the backing
+store's pathname.
+.El
 .Ss VirtIO Console Device Settings
 Each VirtIO Console device contains one or more console ports.
 Each port stores its settings in a node named
diff --git a/usr.sbin/bhyve/pci_virtio_block.c b/usr.sbin/bhyve/pci_virtio_block.c
index 3718b2d7eff0..385b812be84c 100644
--- a/usr.sbin/bhyve/pci_virtio_block.c
+++ b/usr.sbin/bhyve/pci_virtio_block.c
@@ -453,7 +453,7 @@ pci_vtblk_init(struct vmctx *ctx, struct pci_devinst *pi, nvlist_t *nvl)
 {
 	char bident[sizeof("XX:X:X")];
 	struct blockif_ctxt *bctxt;
-	const char *path;
+	const char *path, *serial;
 	MD5_CTX mdctx;
 	u_char digest[16];
 	struct pci_vtblk_softc *sc;
@@ -498,16 +498,23 @@ pci_vtblk_init(struct vmctx *ctx, struct pci_devinst *pi, nvlist_t *nvl)
 	/* sc->vbsc_vq.vq_notify = we have no per-queue notify */
 
 	/*
-	 * Create an identifier for the backing file. Use parts of the
-	 * md5 sum of the filename
+	 * If an explicit identifier is not given, create an
+	 * identifier using parts of the md5 sum of the filename.
 	 */
-	path = get_config_value_node(nvl, "path");
-	MD5Init(&mdctx);
-	MD5Update(&mdctx, path, strlen(path));
-	MD5Final(digest, &mdctx);
-	snprintf(sc->vbsc_ident, VTBLK_BLK_ID_BYTES,
-	    "BHYVE-%02X%02X-%02X%02X-%02X%02X",
-	    digest[0], digest[1], digest[2], digest[3], digest[4], digest[5]);
+	bzero(sc->vbsc_ident, VTBLK_BLK_ID_BYTES);
+	if ((serial = get_config_value_node(nvl, "serial")) != NULL ||
+	    (serial = get_config_value_node(nvl, "ser")) != NULL) {
+		strlcpy(sc->vbsc_ident, serial, VTBLK_BLK_ID_BYTES);
+	} else {
+		path = get_config_value_node(nvl, "path");
+		MD5Init(&mdctx);
+		MD5Update(&mdctx, path, strlen(path));
+		MD5Final(digest, &mdctx);
+		snprintf(sc->vbsc_ident, VTBLK_BLK_ID_BYTES,
+		    "BHYVE-%02X%02X-%02X%02X-%02X%02X",
+		    digest[0], digest[1], digest[2], digest[3], digest[4],
+		    digest[5]);
+	}
 
 	/* setup virtio block config space */
 	sc->vbsc_cfg.vbc_capacity = size / VTBLK_BSIZE; /* 512-byte units */


More information about the dev-commits-src-all mailing list