diff --git a/src/scontrol/update_job.c b/src/scontrol/update_job.c
index dbd722f7bf2361c796107dc78e2d623da53e5ed2..0367731e68035cfd8a347e353142e75ab10087b1 100644
--- a/src/scontrol/update_job.c
+++ b/src/scontrol/update_job.c
@@ -249,7 +249,7 @@ scontrol_hold(char *op, char *job_str)
 {
 	static uint32_t last_job_id = NO_VAL;
 	static job_info_msg_t *resp = NULL;
-	int i, rc = SLURM_SUCCESS;
+	int i, rc = SLURM_SUCCESS, rc2;
 	char *next_str;
 	job_desc_msg_t job_msg;
 	uint32_t job_id = 0;
@@ -323,12 +323,14 @@ scontrol_hold(char *op, char *job_str)
 			if (job_name)
 				continue;
 			slurm_seterrno(ESLURM_JOB_NOT_PENDING);
-			return ESLURM_JOB_NOT_PENDING;
+			rc = MAX(rc, ESLURM_JOB_NOT_PENDING);
 		}
 
 		job_msg.job_id = job_ptr->job_id;
-		if (slurm_update_job(&job_msg))
-			rc = slurm_get_errno();
+		if (slurm_update_job(&job_msg)) {
+			rc2 = slurm_get_errno();
+			rc = MAX(rc, rc2);
+		}
 
 		if (array_id != NO_VAL)
 			break;