7741de6b7d
Recently, we discovered that under the SPDK + UIO mode, it is possible that vm may be wrong when doing io. such as: [root@VM_6_151_centos ~]# mkfs.xfs /dev/vdc meta-data=/dev/vdc isize=512 agcount=4, agsize=234421142 blks = sectsz=4096 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=937684566, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=457853, version=2 = sectsz=4096 sunit=1 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 bad magic number bad magic number Metadata corruption detected at xfs_sb block 0x0/0x1000 libxfs_writebufr: write verifer failed on xfs_sb bno 0x0/0x1000 the github issue link: https://github.com/spdk/spdk/issues/1738 After investigation, we found as below: The qemu set to VHOST_USER_SET_MEM_TABLE then call vhost_user_set_mem_table(dpdk version spdk-20.11)->mmap(without MAP_POPULATE) the mmap will only return the virtual address not map the virtual address to the physical address actually. after call vtophys_notify->vtophys_get_paddr_pagemap, we will get a wrong physical(the virtual address we not access) So this patch is to set MAP_POPULATE during we use SPDK + UIO. Signed-off-by: andypma <andypma@tencent.com> Reviewed-by: Zhigang Lu <tonnylu@tencent.com> Reviewed-by: Xun Ni <richardni@tencent.com> Reviewed-by: YuZhoujian <windyu@tencent.com> Reviewed-by: LuWeiKang <luweikang@tencent.com> Change-Id: Ib921b6d7381f46bb5894ed787cef52e02524197a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5970 Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Ziye Yang <ziye.yang@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> |
||
---|---|---|
.. | ||
Makefile | ||
rte_vhost_compat.c | ||
spdk_vhost.map | ||
vhost_blk.c | ||
vhost_internal.h | ||
vhost_rpc.c | ||
vhost_scsi.c | ||
vhost.c |