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
4fffa01fff
commit
231ceb5da5
@ -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…
x
Reference in New Issue
Block a user