svn commit: r366521 - head/usr.sbin/bhyveload
Conrad Meyer
cem at FreeBSD.org
Wed Oct 7 20:31:14 UTC 2020
Author: cem
Date: Wed Oct 7 20:31:13 2020
New Revision: 366521
URL: https://svnweb.freebsd.org/changeset/base/366521
Log:
bhyveload(8): Implement loader_callbacks::diskwrite
The method was optional prior to r365938, which made it mandatory but did add
any test that an implementation provides the method nor implement it for
bhyveload. The code path might not be hit unless the user's loader was
configured to write to a file on disk, such as with nextboot(8).
Reviewed by: grehan, tsoome
Approved by: bhyve
X-MFC-With: r365938
Differential Revision: https://reviews.freebsd.org/D26710
Modified:
head/usr.sbin/bhyveload/bhyveload.c
Modified: head/usr.sbin/bhyveload/bhyveload.c
==============================================================================
--- head/usr.sbin/bhyveload/bhyveload.c Wed Oct 7 20:09:26 2020 (r366520)
+++ head/usr.sbin/bhyveload/bhyveload.c Wed Oct 7 20:31:13 2020 (r366521)
@@ -300,11 +300,11 @@ cb_stat(void *arg, void *h, struct stat *sbp)
static int
cb_diskread(void *arg, int unit, uint64_t from, void *to, size_t size,
- size_t *resid)
+ size_t *resid)
{
ssize_t n;
- if (unit < 0 || unit >= ndisks )
+ if (unit < 0 || unit >= ndisks)
return (EIO);
n = pread(disk_fd[unit], to, size, from);
if (n < 0)
@@ -314,6 +314,21 @@ cb_diskread(void *arg, int unit, uint64_t from, void *
}
static int
+cb_diskwrite(void *arg, int unit, uint64_t offset, void *src, size_t size,
+ size_t *resid)
+{
+ ssize_t n;
+
+ if (unit < 0 || unit >= ndisks)
+ return (EIO);
+ n = pwrite(disk_fd[unit], src, size, offset);
+ if (n < 0)
+ return (errno);
+ *resid = size - n;
+ return (0);
+}
+
+static int
cb_diskioctl(void *arg, int unit, u_long cmd, void *data)
{
struct stat sb;
@@ -611,6 +626,7 @@ static struct loader_callbacks cb = {
.stat = cb_stat,
.diskread = cb_diskread,
+ .diskwrite = cb_diskwrite,
.diskioctl = cb_diskioctl,
.copyin = cb_copyin,
More information about the svn-src-all
mailing list