- if (!ioctl(f->fd, SIOC_CAPACITY, &cap) == -1) {
- *bytes = cap.lba * cap.blksz;
+ if (!ioctl(f->fd, DIOC_DESCRIBE_EXT, &dext)) {
+ unsigned long long lba;
+
+ lba = ((uint64_t) dext.maxsva_high << 32) | dext.maxsva_low;
+ *bytes = lba * dext.lgblksz;