From: Liu Yuan <tailai.ly at taobao.com> We should add vdi copy number to copy list. Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- sheep/plain_store.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/sheep/plain_store.c b/sheep/plain_store.c index 02b69a5..4b322b4 100644 --- a/sheep/plain_store.c +++ b/sheep/plain_store.c @@ -143,14 +143,42 @@ int default_cleanup(struct siocb *iocb) return SD_RES_SUCCESS; } +static int init_vdi_copy_number(uint64_t oid) +{ + char path[PATH_MAX]; + int fd, flags = def_open_flags, ret; + struct sheepdog_inode inode; + + snprintf(path, sizeof(path), "%s%016" PRIx64, obj_path, oid); + + fd = open(path, flags); + if (fd < 0) { + eprintf("%m\n"); + return SD_RES_EIO; + } + + ret = xpread(fd, (void *)&inode, SD_INODE_HEADER_SIZE, 0); + if (ret != SD_INODE_HEADER_SIZE) { + eprintf("%m\n"); + return SD_RES_EIO; + } + + add_vdi_copy_number(oid_to_vid(oid), inode.nr_copies); + + return SD_RES_SUCCESS; +} + static int init_objlist_and_vdi_bitmap(uint64_t oid) { + int ret; objlist_cache_insert(oid); if (is_vdi_obj(oid)) { vprintf(SDOG_DEBUG, "found the VDI object %" PRIx64 "\n", oid); - set_bit(oid_to_vid(oid), sys->vdi_inuse); + ret = init_vdi_copy_number(oid); + if (ret != SD_RES_SUCCESS) + return ret; } return SD_RES_SUCCESS; } -- 1.7.10.2 |