mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-06-16 02:15:47 +00:00
kvm tools: Implement VIRTIO_BLK_T_GET_ID
Return device id when requested by virtio-blk. Device id is currently based on the device information and the inode number of the underlying disk image. Signed-off-by: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
+11
@@ -207,3 +207,14 @@ ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iove
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
ssize_t disk_image__get_serial(struct disk_image *disk, void *buffer, ssize_t *len)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (fstat(disk->fd, &st) != 0)
|
||||
return 0;
|
||||
|
||||
*len = snprintf(buffer, *len, "%lu%lu%lu", st.st_dev, st.st_rdev, st.st_ino);
|
||||
return *len;
|
||||
}
|
||||
@@ -59,6 +59,7 @@ void disk_image__close_all(struct disk_image **disks, int count);
|
||||
int disk_image__flush(struct disk_image *disk);
|
||||
ssize_t disk_image__read(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
|
||||
ssize_t disk_image__write(struct disk_image *disk, u64 sector, const struct iovec *iov, int iovcount);
|
||||
ssize_t disk_image__get_serial(struct disk_image *disk, void *buffer, ssize_t *len);
|
||||
|
||||
struct disk_image *raw_image__probe(int fd, struct stat *st, bool readonly);
|
||||
struct disk_image *blkdev__probe(const char *filename, struct stat *st);
|
||||
|
||||
@@ -152,6 +152,10 @@ static void virtio_blk_do_io_request(struct kvm *kvm, void *param)
|
||||
case VIRTIO_BLK_T_FLUSH:
|
||||
block_cnt = disk_image__flush(bdev->disk);
|
||||
break;
|
||||
case VIRTIO_BLK_T_GET_ID:
|
||||
block_cnt = VIRTIO_BLK_ID_BYTES;
|
||||
disk_image__get_serial(bdev->disk, (iov + 1)->iov_base, &block_cnt);
|
||||
break;
|
||||
default:
|
||||
pr_warning("request type %d", req->type);
|
||||
block_cnt = -1;
|
||||
|
||||
Reference in New Issue
Block a user