Commit 35d33b8c authored by Jinlong Chen's avatar Jinlong Chen Committed by Tomasz Zawadzki
Browse files

memory: keep (un)registerring when notify_cb returns error



There are cases that a vaddr is valid for some mappings but invalid for
others. For exmaple, a 4-KiB aligned vaddr may be valid for RDMA MR
mapping but not valid for vtophys mapping. In these cases, we should
allow the vaddrs to be (un)registered from/to any mappings that accept
them.

Change-Id: I23280ecf402ba7a6270d130a3107773ba42bc087
Signed-off-by: default avatarJinlong Chen <chenjinlong.cjl@alibaba-inc.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26565


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
parent 95408c55
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -510,8 +510,7 @@ spdk_mem_register(void *vaddr, size_t len)
	TAILQ_FOREACH(map, &g_spdk_mem_maps, tailq) {
		rc = map->ops.notify_cb(map->cb_ctx, map, SPDK_MEM_MAP_NOTIFY_REGISTER, vaddr, len);
		if (rc != 0) {
			pthread_mutex_unlock(&g_spdk_mem_map_mutex);
			return rc;
			DEBUG_PRINT("failed to register vaddr %p to map %p, rc = %d\n", vaddr, map, rc);
		}
	}

@@ -551,7 +550,8 @@ mem_unregister_page(struct spdk_mem_map *map, uint64_t vaddr, size_t len, void *
			rc = map->ops.notify_cb(map->cb_ctx, map, SPDK_MEM_MAP_NOTIFY_UNREGISTER,
						region->iov_base, region->iov_len);
			if (rc != 0) {
				return rc;
				DEBUG_PRINT("failed to unregister vaddr %p from map %p, rc = %d\n",
					    region->iov_base, map, rc);
			}
		}

@@ -625,8 +625,8 @@ spdk_mem_unregister(void *vaddr, size_t len)
			rc = map->ops.notify_cb(map->cb_ctx, map, SPDK_MEM_MAP_NOTIFY_UNREGISTER,
						region.iov_base, region.iov_len);
			if (rc != 0) {
				pthread_mutex_unlock(&g_spdk_mem_map_mutex);
				return rc;
				DEBUG_PRINT("failed to unregister vaddr %p from map %p, rc = %d\n",
					    region.iov_base, map, rc);
			}
		}
	}