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:
Sasha Levin
2011-07-16 12:28:23 +03:00
committed by Will Deacon
parent f42cd9ccfe
commit ff6462e808
3 changed files with 16 additions and 0 deletions
+11
View File
@@ -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;
}
+1
View File
@@ -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);
+4
View File
@@ -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;