1*708dc6cbSAsias He #include "kvm/disk-image.h" 2*708dc6cbSAsias He 3*708dc6cbSAsias He /* 4*708dc6cbSAsias He * raw image and blk dev are similar, so reuse raw image ops. 5*708dc6cbSAsias He */ 6*708dc6cbSAsias He static struct disk_image_operations raw_image_ro_mmap_ops = { 7*708dc6cbSAsias He .read_sector = raw_image__read_sector_ro_mmap, 8*708dc6cbSAsias He .write_sector = raw_image__write_sector_ro_mmap, 9*708dc6cbSAsias He .close = raw_image__close_ro_mmap, 10*708dc6cbSAsias He }; 11*708dc6cbSAsias He 12*708dc6cbSAsias He struct disk_image *blkdev__probe(const char *filename, struct stat *st) 13*708dc6cbSAsias He { 14*708dc6cbSAsias He u64 size; 15*708dc6cbSAsias He int fd; 16*708dc6cbSAsias He 17*708dc6cbSAsias He if (!S_ISBLK(st->st_mode)) 18*708dc6cbSAsias He return NULL; 19*708dc6cbSAsias He 20*708dc6cbSAsias He fd = open(filename, O_RDONLY); 21*708dc6cbSAsias He if (fd < 0) 22*708dc6cbSAsias He return NULL; 23*708dc6cbSAsias He 24*708dc6cbSAsias He if (ioctl(fd, BLKGETSIZE64, &size) < 0) { 25*708dc6cbSAsias He close(fd); 26*708dc6cbSAsias He return NULL; 27*708dc6cbSAsias He } 28*708dc6cbSAsias He 29*708dc6cbSAsias He return disk_image__new(fd, size, &raw_image_ro_mmap_ops, DISK_IMAGE_MMAP); 30*708dc6cbSAsias He } 31