bhyveload: correctly query size of disks
On FreeBSD fstat(2) works fine for querying sizes of plain files, but not so much for character devices. So, use DIOCGMEDIASIZE to try to get the correct size for disks and disk-like devices (e.g. zvols). PR: 220186 Reviewed by: tsoome, grehan MFC after: 1 week
This commit is contained in:
parent
47d8a7d4d1
commit
6589ee29df
@ -311,10 +311,12 @@ cb_diskioctl(void *arg, int unit, u_long cmd, void *data)
|
||||
*(u_int *)data = 512;
|
||||
break;
|
||||
case DIOCGMEDIASIZE:
|
||||
if (fstat(disk_fd[unit], &sb) == 0)
|
||||
*(off_t *)data = sb.st_size;
|
||||
else
|
||||
if (fstat(disk_fd[unit], &sb) != 0)
|
||||
return (ENOTTY);
|
||||
if (S_ISCHR(sb.st_mode) &&
|
||||
ioctl(disk_fd[unit], DIOCGMEDIASIZE, &sb.st_size) != 0)
|
||||
return (ENOTTY);
|
||||
*(off_t *)data = sb.st_size;
|
||||
break;
|
||||
default:
|
||||
return (ENOTTY);
|
||||
|
Loading…
Reference in New Issue
Block a user