svn commit: r316654 - head/sys/boot/userboot/userboot
Toomas Soome
tsoome at FreeBSD.org
Sun Apr 9 11:16:18 UTC 2017
Author: tsoome
Date: Sun Apr 9 11:16:16 2017
New Revision: 316654
URL: https://svnweb.freebsd.org/changeset/base/316654
Log:
loader: r316585 did miss userboot update
The work to implement zfs reader to inspect all pool label copies did
miss the userboot, this update does correct this issue.
Since userboot is already using common/disk.c API (disk_open() etc),
the fix is quite simple - we only need to make sure the userdisk_iocl()
will call disk_ioctl(). In addition, the diskioctl callback does return
int, not pointer.
Note, the review request is actually addressing the sparc and userboot,
but as testing the fix for sparc will take some more time, I am posting the
userboot fix now.
This patch is part of the implementation presented in review:
https://reviews.freebsd.org/D10302
Once we have the sparc part tested, we will have the complete fix
for the issue.
Reviewed by: imp
Modified:
head/sys/boot/userboot/userboot/main.c
head/sys/boot/userboot/userboot/userboot_disk.c
Modified: head/sys/boot/userboot/userboot/main.c
==============================================================================
--- head/sys/boot/userboot/userboot/main.c Sun Apr 9 07:54:39 2017 (r316653)
+++ head/sys/boot/userboot/userboot/main.c Sun Apr 9 11:16:16 2017 (r316654)
@@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <string.h>
#include <setjmp.h>
+#include <sys/disk.h>
#include "bootstrap.h"
#include "disk.h"
@@ -270,6 +271,16 @@ command_reloadbe(int argc, char *argv[])
return (CMD_OK);
}
+
+uint64_t
+ldi_get_size(void *priv)
+{
+ int fd = (uintptr_t) priv;
+ uint64_t size;
+
+ ioctl(fd, DIOCGMEDIASIZE, &size);
+ return (size);
+}
#endif /* USERBOOT_ZFS_SUPPORT */
COMMAND_SET(quit, "quit", "exit the loader", command_quit);
Modified: head/sys/boot/userboot/userboot/userboot_disk.c
==============================================================================
--- head/sys/boot/userboot/userboot/userboot_disk.c Sun Apr 9 07:54:39 2017 (r316653)
+++ head/sys/boot/userboot/userboot/userboot_disk.c Sun Apr 9 11:16:16 2017 (r316654)
@@ -91,8 +91,8 @@ userdisk_init(void)
return (ENOMEM);
for (i = 0; i < userdisk_maxunit; i++) {
if (CALLBACK(diskioctl, i, DIOCGSECTORSIZE,
- §orsize) != NULL || CALLBACK(diskioctl, i,
- DIOCGMEDIASIZE, &mediasize) != NULL)
+ §orsize) != 0 || CALLBACK(diskioctl, i,
+ DIOCGMEDIASIZE, &mediasize) != 0)
return (ENXIO);
ud_info[i].mediasize = mediasize;
ud_info[i].sectorsize = sectorsize;
@@ -230,7 +230,12 @@ static int
userdisk_ioctl(struct open_file *f, u_long cmd, void *data)
{
struct disk_devdesc *dev;
+ int rc;
dev = (struct disk_devdesc *)f->f_devdata;
+ rc = disk_ioctl(dev, cmd, data);
+ if (rc != ENOTTY)
+ return (rc);
+
return (CALLBACK(diskioctl, dev->d_unit, cmd, data));
}
More information about the svn-src-all
mailing list