aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2020-10-07 20:31:13 +0000
committerConrad Meyer <cem@FreeBSD.org>2020-10-07 20:31:13 +0000
commitcc71ff723468de99c72d455ebc970c2354b4d459 (patch)
tree1d5cf06bfa57b756eab614defb3699e9fb6c77cf
parent8481aab1ac34ef07fcf747efbcf4fdbb0435b2f0 (diff)
downloadsrc-cc71ff723468de99c72d455ebc970c2354b4d459.tar.gz
src-cc71ff723468de99c72d455ebc970c2354b4d459.zip
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
Notes
Notes: svn path=/head/; revision=366521
-rw-r--r--usr.sbin/bhyveload/bhyveload.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/usr.sbin/bhyveload/bhyveload.c b/usr.sbin/bhyveload/bhyveload.c
index 1b3be71745da..db7d995f2466 100644
--- a/usr.sbin/bhyveload/bhyveload.c
+++ b/usr.sbin/bhyveload/bhyveload.c
@@ -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 *to, size_t size,
}
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,