Page MenuHomeFreeBSD

D59253.id187200.diff
No OneTemporary

D59253.id187200.diff

diff --git a/usr.sbin/bhyveload/bhyveload.c b/usr.sbin/bhyveload/bhyveload.c
--- a/usr.sbin/bhyveload/bhyveload.c
+++ b/usr.sbin/bhyveload/bhyveload.c
@@ -360,7 +360,14 @@
switch (cmd) {
case DIOCGSECTORSIZE:
- *(u_int *)data = 512;
+ if (fstat(disk_fd[unit], &sb) != 0)
+ return (ENOTTY);
+ if (S_ISCHR(sb.st_mode)) {
+ if (ioctl(disk_fd[unit], DIOCGSECTORSIZE, data) != 0)
+ return (ENOTTY);
+ } else {
+ *(u_int *)data = 512;
+ }
break;
case DIOCGMEDIASIZE:
if (fstat(disk_fd[unit], &sb) != 0)
@@ -714,7 +721,9 @@
static int
disk_open(char *path)
{
- int fd;
+ struct stat sbuf;
+ off_t size;
+ int fd, ret, sectsz;
if (ndisks >= NDISKS)
return (ERANGE);
@@ -724,11 +733,30 @@
fd = open(path, O_RDONLY);
if (fd < 0)
return (errno);
+ if (fstat(fd, &sbuf) < 0) {
+ ret = errno;
+ goto err;
+ }
+
+ size = sbuf.st_size;
+ sectsz = DEV_BSIZE;
+ if (S_ISCHR(sbuf.st_mode)) {
+ if (ioctl(fd, DIOCGMEDIASIZE, &size) < 0 ||
+ ioctl(fd, DIOCGSECTORSIZE, &sectsz) < 0) {
+ ret = errno;
+ goto err;
+ }
+ assert(size != 0);
+ assert(sectsz != 0);
+ }
disk_fd[ndisks] = fd;
ndisks++;
return (0);
+err:
+ close(fd);
+ return (ret);
}
static void
@@ -812,7 +840,7 @@
case 'd':
error = disk_open(optarg);
if (error != 0)
- errx(EX_USAGE, "Could not open '%s'", optarg);
+ errc(EX_USAGE, error, "Could not open '%s'", optarg);
break;
case 'e':

File Metadata

Mime Type
text/plain
Expires
Tue, Sep 29, 8:10 AM (6 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39283458
Default Alt Text
D59253.id187200.diff (1 KB)

Event Timeline