diff --git a/src/plugins/accounting_storage/mysql/as_mysql_convert.c b/src/plugins/accounting_storage/mysql/as_mysql_convert.c
index 9d111a52191dcb6e7f16413f5a70f8957ea24e11..799f5b76e3a2a17fcad25a163ce6f86299a72e32 100644
--- a/src/plugins/accounting_storage/mysql/as_mysql_convert.c
+++ b/src/plugins/accounting_storage/mysql/as_mysql_convert.c
@@ -262,6 +262,16 @@ static int _convert_step_table(mysql_conn_t *mysql_conn, char *cluster_name)
 	return rc;
 }
 
+static int _find_loc_tres(void *x, void *key)
+{
+	local_tres_t *loc_tres = (local_tres_t *)x;
+	uint32_t tres_id = *(uint32_t *)key;
+
+	if (loc_tres->id == tres_id)
+		return 1;
+	return 0;
+}
+
 /*
  * Job time is a ratio of job tres and resv tres:
  * job time = (job_end - job_start) * (job_tres / resv_tres)
@@ -270,38 +280,31 @@ static void _accumulate_job_time(time_t job_start, time_t job_end,
 				 List job_tres, List resv_tres,
 				 double *total_job_time)
 {
-	ListIterator job_itr;
 	ListIterator resv_itr;
 	local_tres_t *loc_tres;
-	uint32_t resv_tres_id = 0;
-	uint32_t job_tres_id = 0;
-	uint64_t resv_tres_count = 0;
-	uint64_t job_tres_count = 0;
+	uint32_t resv_tres_id;
+	uint64_t resv_tres_count;
+	double tres_ratio = 0.0;
 
 	/* Get TRES counts. Make sure the TRES types match. */
-	job_itr = list_iterator_create(job_tres);
 	resv_itr = list_iterator_create(resv_tres);
 	while ((loc_tres = list_next(resv_itr))) {
+		/* Avoid dividing by zero. */
+		if (!loc_tres->count)
+			continue;
 		resv_tres_id = loc_tres->id;
 		resv_tres_count = loc_tres->count;
-		while ((loc_tres = list_next(job_itr))) {
-			job_tres_id = loc_tres->id;
-			if (job_tres_id == resv_tres_id) {
-				job_tres_count = loc_tres->count;
-				goto get_out;
-			}
+		if ((loc_tres = list_find_first(job_tres,
+						_find_loc_tres,
+						&resv_tres_id))) {
+			tres_ratio = (double)loc_tres->count /
+				(double)resv_tres_count;
+			break;
 		}
 	}
-get_out:
-	list_iterator_destroy(job_itr);
 	list_iterator_destroy(resv_itr);
 
-	/* Avoid dividing by zero. */
-	if (resv_tres == 0)
-		return;
-
-	*total_job_time += (double)(job_end - job_start) *
-		job_tres_count / resv_tres_count;
+	*total_job_time += (double)(job_end - job_start) * tres_ratio;
 }
 
 /*
@@ -392,7 +395,8 @@ static int _update_unused_wall(mysql_conn_t *mysql_conn,
 				 */
 				if (job_start < resv_end) {
 					List job_tres_list = list_create(NULL);
-					_add_tres_2_list(job_tres_list,
+					_add_tres_2_list(
+						job_tres_list,
 						row[JOIN_REQ_JOB_TRES]);
 
 					/*
@@ -425,28 +429,24 @@ static int _update_unused_wall(mysql_conn_t *mysql_conn,
 		/* Check for potential underflow. */
 		total_resv_time = resv_end - curr_resv_start;
 		if (total_job_time > total_resv_time) {
-			error("%s, total job time %f is greater than "
-			      "total resv time %ld.", __func__,
-			      total_job_time, total_resv_time);
-			return SLURM_ERROR;
+			error("%s, total job time %f is greater than total resv time %ld.",
+			      __func__, total_job_time, total_resv_time);
+			continue;
 		}
 		unused_wall = total_resv_time - total_job_time;
 
 		/* Update reservation. */
-		query = xstrdup_printf("update \"%s_%s\" set unused_wall = "
-				       "%f where id_resv = %d and "
-				       "time_start = %ld",
-				       cluster_name, resv_table, unused_wall,
-				       curr_resv_id, curr_resv_start);
+		xstrfmtcat(query, "update \"%s_%s\" set unused_wall=%f where id_resv = %d && time_start = %ld",
+			   cluster_name, resv_table, unused_wall,
+			   curr_resv_id, curr_resv_start);
+	}
 
-		if (debug_flags & DEBUG_FLAG_DB_QUERY)
-			DB_DEBUG(mysql_conn->conn, "query\n%s", query);
+	if (debug_flags & DEBUG_FLAG_DB_QUERY)
+		DB_DEBUG(mysql_conn->conn, "query\n%s", query);
+
+	rc = mysql_db_query(mysql_conn, query);
+	xfree(query);
 
-		rc = mysql_db_query(mysql_conn, query);
-		xfree(query);
-		if (rc != SLURM_SUCCESS)
-			return SLURM_ERROR;
-	}
 	return rc;
 }