From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:60843) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGmsa-0007a4-TF for qemu-devel@nongnu.org; Wed, 26 Sep 2012 04:22:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TGmsV-0000jN-1U for qemu-devel@nongnu.org; Wed, 26 Sep 2012 04:22:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:29389) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGmsU-0000jE-PS for qemu-devel@nongnu.org; Wed, 26 Sep 2012 04:21:54 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q8Q8LruY019731 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 26 Sep 2012 04:21:53 -0400 Date: Wed, 26 Sep 2012 16:18:05 +0800 From: Dave Young Message-ID: <20120926081805.GA6799@dhcp-16-143.nay.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] [PATCH V3] virtio-blk: add default serial id List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: eblake@redhat.com 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. Signed-off-by: Dave Young --- hw/virtio-blk.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) --- qemu-kvm.orig/hw/virtio-blk.c 2012-09-02 09:45:03.115696878 +0800 +++ qemu-kvm/hw/virtio-blk.c 2012-09-20 20:57:56.177206991 +0800 @@ -22,6 +22,7 @@ # include #endif +#define DEFAULT_VIRTIO_BLK_SERIAL_LEN 8 typedef struct VirtIOBlock { VirtIODevice vdev; @@ -33,6 +34,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 +366,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 +391,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); @@ -611,6 +616,7 @@ static const BlockDevOps virtio_block_op VirtIODevice *virtio_blk_init(DeviceState *dev, VirtIOBlkConf *blk) { + static int drive_serial = 1; VirtIOBlock *s; static int virtio_blk_id; @@ -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;