]> Git Repo - qemu.git/commitdiff
block/parallels: add get_block_status
authorRoman Kagan <[email protected]>
Tue, 28 Apr 2015 07:46:38 +0000 (10:46 +0300)
committerStefan Hajnoczi <[email protected]>
Fri, 22 May 2015 08:37:31 +0000 (09:37 +0100)
Implement VFS method for get_block_status to Parallels format driver.

qemu_co_mutex_lock is not necessary yet (the driver is read-only) but
will be necessary very soon when write will be supported.

Signed-off-by: Roman Kagan <[email protected]>
Reviewed-by: Denis V. Lunev <[email protected]>
Signed-off-by: Denis V. Lunev <[email protected]>
Message-id: 1430207220[email protected]
CC: Kevin Wolf <[email protected]>
CC: Stefan Hajnoczi <[email protected]>
Signed-off-by: Stefan Hajnoczi <[email protected]>
block/parallels.c

index 8770c8235186987e883f157244af7a8ee6a5111c..b469984ef6e6b788a5c7d95f16653c354a9fa773 100644 (file)
@@ -166,6 +166,26 @@ static int cluster_remainder(BDRVParallelsState *s, int64_t sector_num,
     return MIN(nb_sectors, ret);
 }
 
+static int64_t coroutine_fn parallels_co_get_block_status(BlockDriverState *bs,
+        int64_t sector_num, int nb_sectors, int *pnum)
+{
+    BDRVParallelsState *s = bs->opaque;
+    int64_t offset;
+
+    qemu_co_mutex_lock(&s->lock);
+    offset = seek_to_sector(s, sector_num);
+    qemu_co_mutex_unlock(&s->lock);
+
+    *pnum = cluster_remainder(s, sector_num, nb_sectors);
+
+    if (offset < 0) {
+        return 0;
+    }
+
+    return (offset << BDRV_SECTOR_BITS) |
+        BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;
+}
+
 static int parallels_read(BlockDriverState *bs, int64_t sector_num,
                     uint8_t *buf, int nb_sectors)
 {
@@ -213,6 +233,7 @@ static BlockDriver bdrv_parallels = {
     .bdrv_open         = parallels_open,
     .bdrv_read          = parallels_co_read,
     .bdrv_close                = parallels_close,
+    .bdrv_co_get_block_status = parallels_co_get_block_status,
 };
 
 static void bdrv_parallels_init(void)
This page took 0.028426 seconds and 4 git commands to generate.