1708dc6cbSAsias He #include "kvm/disk-image.h" 2708dc6cbSAsias He 3708dc6cbSAsias He /* 4708dc6cbSAsias He * raw image and blk dev are similar, so reuse raw image ops. 5708dc6cbSAsias He */ 6*87ee33c8SAsias He static struct disk_image_operations raw_image_ops = { 7*87ee33c8SAsias He .read_sector = raw_image__read_sector, 8*87ee33c8SAsias He .write_sector = raw_image__write_sector, 9*87ee33c8SAsias He .close = raw_image__close, 10708dc6cbSAsias He }; 11708dc6cbSAsias He 12708dc6cbSAsias He struct disk_image *blkdev__probe(const char *filename, struct stat *st) 13708dc6cbSAsias He { 14708dc6cbSAsias He u64 size; 15708dc6cbSAsias He int fd; 16708dc6cbSAsias He 17708dc6cbSAsias He if (!S_ISBLK(st->st_mode)) 18708dc6cbSAsias He return NULL; 19708dc6cbSAsias He 20708dc6cbSAsias He fd = open(filename, O_RDONLY); 21708dc6cbSAsias He if (fd < 0) 22708dc6cbSAsias He return NULL; 23708dc6cbSAsias He 24708dc6cbSAsias He if (ioctl(fd, BLKGETSIZE64, &size) < 0) { 25708dc6cbSAsias He close(fd); 26708dc6cbSAsias He return NULL; 27708dc6cbSAsias He } 28708dc6cbSAsias He 29*87ee33c8SAsias He return disk_image__new(fd, size, &raw_image_ops, DISK_IMAGE_MMAP); 30708dc6cbSAsias He } 31