Add virtio disk identification ioctl
authorjohn cooper <john.cooper@redhat.com>
Thu, 25 Mar 2010 05:34:02 +0000 (01:34 -0400)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 19 May 2010 12:45:40 +0000 (22:15 +0930)
Return serial string to the guest application via
ioctl driver call.

Note this form of interface to the guest userland
was the consensus when the prior version using
the ATA_IDENTIFY came under dispute.

Signed-off-by: john cooper <john.cooper@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/block/virtio_blk.c

index 759dee8..67dcb19 100644 (file)
@@ -225,6 +225,16 @@ static int virtblk_ioctl(struct block_device *bdev, fmode_t mode,
        struct gendisk *disk = bdev->bd_disk;
        struct virtio_blk *vblk = disk->private_data;
 
+       if (cmd == 'VBID') {
+               void __user *usr_data = (void __user *)data;
+               char id_str[VIRTIO_BLK_ID_BYTES];
+               int err;
+
+               err = virtblk_get_id(disk, id_str);
+               if (!err && copy_to_user(usr_data, id_str, VIRTIO_BLK_ID_BYTES))
+                       err = -EFAULT;
+               return err;
+       }
        /*
         * Only allow the generic SCSI ioctls if the host can support it.
         */