diff --git a/src/slurmctld/acct_policy.c b/src/slurmctld/acct_policy.c index 137dcbed293b4066f5756c3a028b49b2c63d9fd5..eb6d7496cd566db2e796bfb76e955d26cf615373 100644 --- a/src/slurmctld/acct_policy.c +++ b/src/slurmctld/acct_policy.c @@ -2003,12 +2003,20 @@ extern uint32_t acct_policy_get_max_nodes(struct job_record *job_ptr, assoc_mgr_lock(&locks); if (qos_ptr) { - qos_max_p_limit = max_nodes_limit = - MIN(qos_ptr->max_nodes_pj, qos_ptr->max_nodes_pu); - max_nodes_limit = - MIN(max_nodes_limit, qos_ptr->grp_nodes); - if (max_nodes_limit != INFINITE) - *wait_reason = WAIT_QOS_JOB_LIMIT; + if (qos_ptr->max_nodes_pj < qos_ptr->max_nodes_pu) { + max_nodes_limit = qos_ptr->max_nodes_pj; + *wait_reason = WAIT_QOS_MAX_NODE_PER_JOB; + } else if (qos_ptr->max_nodes_pu != INFINITE) { + max_nodes_limit = qos_ptr->max_nodes_pu; + *wait_reason = WAIT_QOS_MAX_NODE_PER_USER; + } + + qos_max_p_limit = max_nodes_limit; + + if (qos_ptr->grp_nodes < max_nodes_limit) { + max_nodes_limit = qos_ptr->grp_nodes; + *wait_reason = WAIT_QOS_GRP_NODES; + } } /* We have to traverse all the associations because QOS might @@ -2019,7 +2027,7 @@ extern uint32_t acct_policy_get_max_nodes(struct job_record *job_ptr, && (assoc_ptr->grp_nodes != INFINITE) && (assoc_ptr->grp_nodes < max_nodes_limit)) { max_nodes_limit = assoc_ptr->grp_nodes; - *wait_reason = WAIT_ASSOC_JOB_LIMIT; + *wait_reason = WAIT_ASSOC_GRP_NODES; grp_set = 1; } @@ -2028,7 +2036,7 @@ extern uint32_t acct_policy_get_max_nodes(struct job_record *job_ptr, && (assoc_ptr->max_nodes_pj != INFINITE) && (assoc_ptr->max_nodes_pj < max_nodes_limit)) { max_nodes_limit = assoc_ptr->max_nodes_pj; - *wait_reason = WAIT_ASSOC_JOB_LIMIT; + *wait_reason = WAIT_ASSOC_MAX_NODE_PER_JOB; } /* only check the first grp set */