[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC] block/mirror: fix file-system went to read-only after block-mirror
From: |
Jinhua Cao |
Subject: |
[RFC] block/mirror: fix file-system went to read-only after block-mirror |
Date: |
Thu, 24 Jun 2021 20:06:35 +0800 |
1) Configure the VM disk as prdm.
...
<disk type='block' device='lun'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/disk/by-id/scsi-368886030000000ca50c1cd1563996917'
index='1'/>
<backingStore/>
<target dev='sdb' bus='scsi'/>
<alias name='scsi0-0-0-1'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
...
Mount the disk in guest and keep the disk writing data continuously during
block-mirror,
the file-system went to read-only after block-mirror.
2) This commit 6cdbceb12cf[mirror: Add filter-node-name to blockdev-mirror]
introduces
mirror_top_bs which does not set default function for
mirror_top_bs->drv->bdrv_co_ioctl.
3) The function bdrv_co_ioctl in block/io.c will be called during block-mirror,
in this
function, the judgment is as follow:
---
if (!drv || (!drv->bdrv_aio_ioctl && !drv->bdrv_co_ioctl)) {
co.ret = -ENOTSUP;
goto out;
}
---
The mirror_top_bs does not set drv->bdrv_aio_ioctl or drv->bdrv_co_ioctl which
result this
return -ENOTSUP. So the file-system went to read-only after block-mirror.
4) This patch set a default function for mirror_top_bs->drv->bdrv_aio_ioctl,
fix this problem.
---
block/mirror.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/block/mirror.c b/block/mirror.c
index 019f6deaa5..63b788ec39 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1480,6 +1480,12 @@ static int coroutine_fn
bdrv_mirror_top_flush(BlockDriverState *bs)
return bdrv_co_flush(bs->backing->bs);
}
+static int coroutine_fn bdrv_mirror_top_ioctl(BlockDriverState *bs,
+ unsigned long int req, void *buf)
+{
+ return 0;
+}
+
static int coroutine_fn bdrv_mirror_top_pwrite_zeroes(BlockDriverState *bs,
int64_t offset, int bytes, BdrvRequestFlags flags)
{
@@ -1555,6 +1561,7 @@ static BlockDriver bdrv_mirror_top = {
.bdrv_co_pwrite_zeroes = bdrv_mirror_top_pwrite_zeroes,
.bdrv_co_pdiscard = bdrv_mirror_top_pdiscard,
.bdrv_co_flush = bdrv_mirror_top_flush,
+ .bdrv_co_ioctl = bdrv_mirror_top_ioctl,
.bdrv_refresh_filename = bdrv_mirror_top_refresh_filename,
.bdrv_child_perm = bdrv_mirror_top_child_perm,
--
2.27.0
- [RFC] block/mirror: fix file-system went to read-only after block-mirror,
Jinhua Cao <=