qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH v2] virtio-blk: add default serial id


From: Dave Young
Subject: [Qemu-devel] [PATCH v2] virtio-blk: add default serial id
Date: Fri, 21 Sep 2012 21:30:31 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

For virtio block device, if user does not specify the serial attribute,
There will be no serial availabe, this is not convenient for identifying
the disk.

Doing something similar to ide disks, add a "VD0000?" default serial
number if user does not specify it.

[v1->v2 address comments from Eric Blake]:
fix spell errors in patch description
decrease drive_serial in virtio_blk_exit as well

Signed-off-by: Dave Young <address@hidden>
---
 hw/virtio-blk.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- qemu.orig/hw/virtio-blk.c
+++ qemu/hw/virtio-blk.c
@@ -22,6 +22,8 @@
 # include <scsi/sg.h>
 #endif
 
+static int drive_serial = 1;
+#define DEFAULT_VIRTIO_BLK_SERIAL_LEN 8
 typedef struct VirtIOBlock
 {
     VirtIODevice vdev;
@@ -33,6 +35,7 @@ typedef struct VirtIOBlock
     VirtIOBlkConf *blk;
     unsigned short sector_mask;
     DeviceState *qdev;
+    int drive_serial;
 } VirtIOBlock;
 
 static VirtIOBlock *to_virtio_blk(VirtIODevice *vdev)
@@ -364,6 +367,7 @@ static void virtio_blk_handle_request(Vi
     MultiReqBuffer *mrb)
 {
     uint32_t type;
+    char serial[DEFAULT_VIRTIO_BLK_SERIAL_LEN];
 
     if (req->elem.out_num < 1 || req->elem.in_num < 1) {
         error_report("virtio-blk missing headers");
@@ -388,12 +392,14 @@ static void virtio_blk_handle_request(Vi
     } else if (type & VIRTIO_BLK_T_GET_ID) {
         VirtIOBlock *s = req->dev;
 
+        snprintf(serial, DEFAULT_VIRTIO_BLK_SERIAL_LEN,
+                 "VD%05d", s->drive_serial);
         /*
          * NB: per existing s/n string convention the string is
          * terminated by '\0' only when shorter than buffer.
          */
         strncpy(req->elem.in_sg[0].iov_base,
-                s->blk->serial ? s->blk->serial : "",
+                s->blk->serial ? s->blk->serial : serial,
                 MIN(req->elem.in_sg[0].iov_len, VIRTIO_BLK_ID_BYTES));
         virtio_blk_req_complete(req, VIRTIO_BLK_S_OK);
         g_free(req);
@@ -632,6 +638,7 @@ VirtIODevice *virtio_blk_init(DeviceStat
                                           sizeof(struct virtio_blk_config),
                                           sizeof(VirtIOBlock));
 
+    s->drive_serial = drive_serial++;
     s->vdev.get_config = virtio_blk_update_config;
     s->vdev.set_config = virtio_blk_set_config;
     s->vdev.get_features = virtio_blk_get_features;
@@ -664,4 +671,5 @@ void virtio_blk_exit(VirtIODevice *vdev)
     unregister_savevm(s->qdev, "virtio-blk", s);
     blockdev_mark_auto_del(s->bs);
     virtio_cleanup(vdev);
+    drive_serial--;
 }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]