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
This commit is contained in:
Conrad Meyer 2020-10-07 20:31:13 +00:00
parent 8481aab1ac
commit cc71ff7234
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=366521

View file

@ -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)
@ -313,6 +313,21 @@ cb_diskread(void *arg, int unit, uint64_t from, void *to, size_t size,
return (0);
}
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)
{
@ -611,6 +626,7 @@ static struct loader_callbacks cb = {
.stat = cb_stat,
.diskread = cb_diskread,
.diskwrite = cb_diskwrite,
.diskioctl = cb_diskioctl,
.copyin = cb_copyin,