[tip:tools/kvm] kvm tools: Implement VIRTIO_BLK_T_GET_ID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Commit-ID:  6bf28d407813297e5a1c57f9c7c6154f878d9792
Gitweb:     http://git.kernel.org/tip/6bf28d407813297e5a1c57f9c7c6154f878d9792
Author:     Sasha Levin <levinsasha928@xxxxxxxxx>
AuthorDate: Sat, 16 Jul 2011 12:28:23 +0300
Committer:  Pekka Enberg <penberg@xxxxxxxxxx>
CommitDate: Mon, 18 Jul 2011 11:38:14 +0300

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@xxxxxxxxx>
Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx>
---
 tools/kvm/disk/core.c              |   11 +++++++++++
 tools/kvm/include/kvm/disk-image.h |    1 +
 tools/kvm/virtio/blk.c             |    4 ++++
 3 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/tools/kvm/disk/core.c b/tools/kvm/disk/core.c
index 965bbe5..b488888 100644
--- a/tools/kvm/disk/core.c
+++ b/tools/kvm/disk/core.c
@@ -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;
+}
\ No newline at end of file
diff --git a/tools/kvm/include/kvm/disk-image.h b/tools/kvm/include/kvm/disk-image.h
index 1363fe1..75b54f9 100644
--- a/tools/kvm/include/kvm/disk-image.h
+++ b/tools/kvm/include/kvm/disk-image.h
@@ -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);
diff --git a/tools/kvm/virtio/blk.c b/tools/kvm/virtio/blk.c
index f2a728c..f5ecdd9 100644
--- a/tools/kvm/virtio/blk.c
+++ b/tools/kvm/virtio/blk.c
@@ -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;
--
To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Stable Commits]     [Linux Stable Kernel]     [Linux Kernel]     [Linux USB Devel]     [Linux Video &Media]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux