Browse Source

Fix more disk cases: when just invalidating memory, we still need to note that it's the RAM which will run the write invalidation

Samuel Thibault 8 years ago
parent
commit
8235eea5c7
1 changed files with 6 additions and 5 deletions
  1. 6 5
      src/datawizard/coherency.c

+ 6 - 5
src/datawizard/coherency.c

@@ -331,6 +331,11 @@ static int determine_request_path(starpu_data_handle_t handle,
 {
 {
 	if (src_node == dst_node || !(mode & STARPU_R))
 	if (src_node == dst_node || !(mode & STARPU_R))
 	{
 	{
+		if (starpu_node_get_kind(dst_node) == STARPU_DISK_RAM)
+			handling_nodes[0] = src_node;
+		else
+			handling_nodes[0] = dst_node;
+
 		if (write_invalidation)
 		if (write_invalidation)
 			/* The invalidation request will be enough */
 			/* The invalidation request will be enough */
 			return 0;
 			return 0;
@@ -338,11 +343,7 @@ static int determine_request_path(starpu_data_handle_t handle,
 		/* The destination node should only allocate the data, no transfer is required */
 		/* The destination node should only allocate the data, no transfer is required */
 		STARPU_ASSERT(max_len >= 1);
 		STARPU_ASSERT(max_len >= 1);
 		src_nodes[0] = STARPU_MAIN_RAM; // ignored
 		src_nodes[0] = STARPU_MAIN_RAM; // ignored
-		if (starpu_node_get_kind(dst_node) == STARPU_DISK_RAM)
-			dst_nodes[0] = src_node;
-		else
-			dst_nodes[0] = dst_node;
-		handling_nodes[0] = dst_node;
+		dst_nodes[0] = dst_node;
 		return 1;
 		return 1;
 	}
 	}