From 3eede48f6bbaeed08ebe87440c40b03d8cff5b3d Mon Sep 17 00:00:00 2001 From: David Bigagli <david@schedmd.com> Date: Wed, 17 Jul 2013 12:25:23 -0700 Subject: [PATCH] Implement lib C qsort() as main sorting function. Change the compare functions accordingly. --- src/common/list.c | 95 ++++++- src/common/list.h | 12 +- src/common/print_fields.c | 11 +- src/common/slurm_protocol_defs.c | 10 +- src/common/slurm_protocol_defs.h | 4 +- src/common/slurmdb_defs.c | 19 +- src/db_api/job_report_functions.c | 14 +- .../accounting_storage/common/common_as.c | 6 +- .../filetxt/filetxt_jobacct_process.c | 4 +- .../accounting_storage/mysql/as_mysql_assoc.c | 8 +- .../accounting_storage/pgsql/as_pg_assoc.c | 8 +- .../partition_prio/preempt_partition_prio.c | 9 +- src/plugins/preempt/qos/preempt_qos.c | 9 +- .../select/bluegene/bg_record_functions.c | 16 +- .../select/bluegene/bg_record_functions.h | 4 +- src/plugins/select/cons_res/select_cons_res.c | 22 +- src/plugins/select/linear/select_linear.c | 15 +- src/sacctmgr/common.c | 9 +- src/sacctmgr/sacctmgr.h | 3 +- src/sinfo/sort.c | 173 ++++++++----- src/slurmctld/gang.c | 15 +- src/slurmctld/job_scheduler.c | 8 +- src/slurmctld/node_mgr.c | 11 +- src/squeue/sort.c | 232 ++++++++++++------ src/sreport/common.c | 36 ++- src/sreport/job_reports.c | 26 +- src/sreport/sreport.h | 12 +- src/sview/block_info.c | 12 +- src/sview/grid.c | 11 +- src/sview/job_info.c | 12 +- src/sview/part_info.c | 24 +- src/sview/resv_info.c | 12 +- 32 files changed, 611 insertions(+), 251 deletions(-) diff --git a/src/common/list.c b/src/common/list.c index 773f2007ff1..bf6230a730b 100644 --- a/src/common/list.c +++ b/src/common/list.c @@ -115,7 +115,7 @@ strong_alias(list_install_fork_handlers, slurm_list_install_fork_handlers); # ifndef lsd_nomem_error static void * lsd_nomem_error(char *file, int line, char *mesg) { - + log_oom(file, line, mesg); abort(); return NULL; @@ -201,7 +201,8 @@ static ListIterator list_iterator_alloc (void); static void list_iterator_free (ListIterator i); static void * list_alloc_aux (int size, void *pfreelist); static void list_free_aux (void *x, void *pfreelist); - +static void *_list_pop_locked(List l); +static void *_list_append_locked(List l, void *x); /*************** * Variables * @@ -369,7 +370,7 @@ list_append (List l, void *x) assert(x != NULL); list_mutex_lock(&l->mutex); assert(l->magic == LIST_MAGIC); - v = list_node_create(l, l->tail, x); + v = _list_append_locked(l, x); list_mutex_unlock(&l->mutex); return(v); } @@ -530,7 +531,7 @@ list_flush (List l) } void -list_sort (List l, ListCmpF f) +list_sort2 (List l, ListCmpF f) { ListIterator it; @@ -613,7 +614,7 @@ list_sort (List l, ListCmpF f) } void -list_sort2 (List l, ListCmpF f) +list_sort3 (List l, ListCmpF f) { /* Note: Time complexity O(n^2). */ @@ -669,6 +670,58 @@ list_push (List l, void *x) return(v); } +void +list_sort(List l, ListCmpF f) +{ + char **v; + int n; + int lsize; + void *e; + ListIterator i; + + assert(l != NULL); + assert(f != NULL); + assert(l->magic == LIST_MAGIC); + list_mutex_lock(&l->mutex); + + if (l->count <= 1) { + list_mutex_unlock(&l->mutex); + return; + } + + lsize = l->count; + v = xmalloc(lsize * sizeof(char *)); + if (v == NULL) { + list_mutex_unlock(&l->mutex); + lsd_nomem_error(__FILE__, __LINE__, "list_sort"); + return; + } + + n = 0; + while ((e = _list_pop_locked(l))) { + v[n] = e; + ++n; + } + + qsort(v, n, sizeof(char *), (__compar_fn_t)f); + + for (n = 0; n < lsize; n++) { + _list_append_locked(l, v[n]); + } + + xfree(v); + + /* Reset all iterators on the list to point + * to the head of the list. + */ + for (i = l->iNext; i; i = i->iNext) { + assert(i->magic == LIST_MAGIC); + i->pos = i->list->head; + i->prev = &i->list->head; + } + + list_mutex_unlock(&l->mutex); +} void * list_pop (List l) @@ -678,7 +731,7 @@ list_pop (List l) assert(l != NULL); list_mutex_lock(&l->mutex); assert(l->magic == LIST_MAGIC); - v = list_node_destroy(l, &l->head); + v = _list_pop_locked(l); list_mutex_unlock(&l->mutex); return(v); } @@ -1121,3 +1174,33 @@ list_mutex_is_locked (pthread_mutex_t *mutex) } #endif /* WITH_PTHREADS */ #endif /* !NDEBUG */ + +/* _list_pop_locked + * + * Pop an item from the list assuming the + * the list is already locked. + */ +static void * +_list_pop_locked(List l) +{ + void *v; + + v = list_node_destroy(l, &l->head); + + return v; +} + +/* _list_append_locked() + * + * Append an item to the list. The function assumes + * the list is already locked. + */ +static void * +_list_append_locked(List l, void *x) +{ + void *v; + + v = list_node_create(l, l->tail, x); + + return v; +} diff --git a/src/common/list.h b/src/common/list.h index d24dcdd3839..1e19fea80e9 100644 --- a/src/common/list.h +++ b/src/common/list.h @@ -217,7 +217,17 @@ void list_sort (List l, ListCmpF f); /* * Sorts list [l] into ascending order according to the function [f]. * Note: Sorting a list resets all iterators associated with the list. - * Note: The sort algorithm is stable. + * This function uses the libC qsort() algorithm. + */ + +void list_sort2 (List l, ListCmpF f); +/* This function uses the sort merge algorithm + * Note: Sorting a list resets all iterators associated with the list. + */ + +void list_sort3 (List l, ListCmpF f); +/* This function uses the n^2 brute force algorithm. + * Note: Sorting a list resets all iterators associated with the list. */ /**************************** diff --git a/src/common/print_fields.c b/src/common/print_fields.c index 3e8fe1d51d6..fe13a5bdbec 100644 --- a/src/common/print_fields.c +++ b/src/common/print_fields.c @@ -42,9 +42,16 @@ int print_fields_parsable_print = 0; int print_fields_have_header = 1; -static int _sort_char_list(char *name_a, char *name_b) +static int _sort_char_list(void *v1, void *v2) { - int diff = strcmp(name_a, name_b); + int diff; + char *name_a; + char *name_b; + + name_a = *(char **)v1; + name_b = *(char **)v2; + + diff = strcmp(name_a, name_b); if (diff < 0) return -1; diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index e4df20a6d62..460b8c3c3ed 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -254,9 +254,15 @@ endit: return count; } -extern int slurm_sort_char_list_asc(char *name_a, char *name_b) +extern int slurm_sort_char_list_asc(void *v1, void *v2) { - int diff = strcmp(name_a, name_b); + int diff; + char *name_a; + char *name_b; + + name_a = *(char **)v1; + name_b = *(char **)v2; + diff = strcmp(name_a, name_b); if (diff < 0) return -1; diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index 544ec49c515..a70d9b2915d 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -748,7 +748,7 @@ typedef struct return_code_msg { * the job epilog. */ #define SIG_PREEMPTED 994 /* Dummy signal value for job preemption */ -#define SIG_DEBUG_WAKE 995 /* Dummy signal value to wake procs stopped +#define SIG_DEBUG_WAKE 995 /* Dummy signal value to wake procs stopped * for debugger */ #define SIG_TIME_LIMIT 996 /* Dummy signal value for time limit reached */ #define SIG_ABORT 997 /* Dummy signal value to abort a job */ @@ -1030,7 +1030,7 @@ extern void slurm_destroy_uint32_ptr(void *object); /* here to add \\ to all \" in a string this needs to be xfreed later */ extern char *slurm_add_slash_to_quotes(char *str); extern int slurm_addto_char_list(List char_list, char *names); -extern int slurm_sort_char_list_asc(char *name_a, char *name_b); +extern int slurm_sort_char_list_asc(void *, void *); extern int slurm_sort_char_list_desc(char *name_a, char *name_b); /* free message functions */ diff --git a/src/common/slurmdb_defs.c b/src/common/slurmdb_defs.c index f9f14ac13ac..1a97df4c673 100644 --- a/src/common/slurmdb_defs.c +++ b/src/common/slurmdb_defs.c @@ -119,10 +119,14 @@ static void _free_cluster_cond_members(slurmdb_cluster_cond_t *cluster_cond) * */ -static int _sort_childern_list(slurmdb_hierarchical_rec_t *assoc_a, - slurmdb_hierarchical_rec_t *assoc_b) +static int _sort_children_list(void *v1, void *v2) { int diff = 0; + slurmdb_hierarchical_rec_t *assoc_a; + slurmdb_hierarchical_rec_t *assoc_b; + + assoc_a = *(slurmdb_hierarchical_rec_t **)v1; + assoc_b = *(slurmdb_hierarchical_rec_t **)v2; /* Since all these assocations are on the same level we don't * have to check the lfts @@ -155,9 +159,14 @@ static int _sort_childern_list(slurmdb_hierarchical_rec_t *assoc_a, * */ -static int _sort_assoc_by_lft_dec(slurmdb_association_rec_t *assoc_a, - slurmdb_association_rec_t *assoc_b) +static int _sort_assoc_by_lft_dec(void *v1, void *v2) { + slurmdb_association_rec_t *assoc_a; + slurmdb_association_rec_t *assoc_b; + + assoc_a = *(slurmdb_association_rec_t **)v1; + assoc_b = *(slurmdb_association_rec_t **)v2; + if (assoc_a->lft == assoc_b->lft) return 0; if (assoc_a->lft > assoc_b->lft) @@ -174,7 +183,7 @@ static int _sort_slurmdb_hierarchical_rec_list( if (!list_count(slurmdb_hierarchical_rec_list)) return SLURM_SUCCESS; - list_sort(slurmdb_hierarchical_rec_list, (ListCmpF)_sort_childern_list); + list_sort(slurmdb_hierarchical_rec_list, (ListCmpF)_sort_children_list); itr = list_iterator_create(slurmdb_hierarchical_rec_list); while((slurmdb_hierarchical_rec = list_next(itr))) { diff --git a/src/db_api/job_report_functions.c b/src/db_api/job_report_functions.c index af92f7aff24..69e4c478da4 100644 --- a/src/db_api/job_report_functions.c +++ b/src/db_api/job_report_functions.c @@ -49,10 +49,18 @@ #include "src/common/slurm_accounting_storage.h" #include "src/common/xstring.h" -static int _sort_group_asc(char *group_a, char *group_b) +static int _sort_group_asc(void *v1, void *v2) { - int size_a = atoi(group_a); - int size_b = atoi(group_b); + char *group_a; + char *group_b; + int size_a; + int size_b; + + group_a = *(char **)v1; + group_b = *(char **)v2; + + size_a = atoi(group_a); + size_b = atoi(group_b); if (size_a < size_b) return -1; diff --git a/src/plugins/accounting_storage/common/common_as.c b/src/plugins/accounting_storage/common/common_as.c index c5961a9729b..420799ce440 100644 --- a/src/plugins/accounting_storage/common/common_as.c +++ b/src/plugins/accounting_storage/common/common_as.c @@ -65,9 +65,11 @@ extern char *wckey_month_table; /* * We want SLURMDB_MODIFY_ASSOC always to be the last */ -static int _sort_update_object_dec(slurmdb_update_object_t *object_a, - slurmdb_update_object_t *object_b) +static int _sort_update_object_dec(void *a, void *b) { + slurmdb_update_object_t *object_a = *(slurmdb_update_object_t **)a; + slurmdb_update_object_t *object_b = *(slurmdb_update_object_t **)b; + if ((object_a->type == SLURMDB_MODIFY_ASSOC) && (object_b->type != SLURMDB_MODIFY_ASSOC)) return 1; diff --git a/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c b/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c index a762e441ff2..a8bb9fdca37 100644 --- a/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c +++ b/src/plugins/accounting_storage/filetxt/filetxt_jobacct_process.c @@ -470,8 +470,8 @@ static FILE *_open_log_file(char *logfile) } static int _cmp_jrec(const void *a1, const void *a2) { - expired_rec_t *j1 = (expired_rec_t *) a1; - expired_rec_t *j2 = (expired_rec_t *) a2; + expired_rec_t *j1 = *(expired_rec_t **) a1; + expired_rec_t *j2 = *(expired_rec_t **) a2; if (j1->job < j2->job) return -1; diff --git a/src/plugins/accounting_storage/mysql/as_mysql_assoc.c b/src/plugins/accounting_storage/mysql/as_mysql_assoc.c index e5ed5be3004..297bdd9c892 100644 --- a/src/plugins/accounting_storage/mysql/as_mysql_assoc.c +++ b/src/plugins/accounting_storage/mysql/as_mysql_assoc.c @@ -181,11 +181,13 @@ enum { RASSOC_COUNT }; -static int _assoc_sort_cluster(slurmdb_association_rec_t *rec_a, - slurmdb_association_rec_t *rec_b) +static int _assoc_sort_cluster(void *r1, void *r2) { - int diff = strcmp(rec_a->cluster, rec_b->cluster); + slurmdb_association_rec_t *rec_a = *(slurmdb_association_rec_t **)r1; + slurmdb_association_rec_t *rec_b = *(slurmdb_association_rec_t **)r2; + int diff; + diff = strcmp(rec_a->cluster, rec_b->cluster); if (diff < 0) return -1; else if (diff > 0) diff --git a/src/plugins/accounting_storage/pgsql/as_pg_assoc.c b/src/plugins/accounting_storage/pgsql/as_pg_assoc.c index 20e3e3ccb9d..caf7ebe7890 100644 --- a/src/plugins/accounting_storage/pgsql/as_pg_assoc.c +++ b/src/plugins/accounting_storage/pgsql/as_pg_assoc.c @@ -1423,11 +1423,13 @@ check_assoc_tables(PGconn *db_conn, char *cluster) } static int -_assoc_sort_cluster(slurmdb_association_rec_t *rec_a, - slurmdb_association_rec_t *rec_b) +_assoc_sort_cluster(void *r1, void *r2) { - int diff = strcmp(rec_a->cluster, rec_b->cluster); + slurmdb_association_rec_t *rec_a = *(slurmdb_association_rec_t **)r1; + slurmdb_association_rec_t *rec_b = *(slurmdb_association_rec_t **)r2; + int diff; + diff = strcmp(rec_a->cluster, rec_b->cluster); if (diff < 0) return -1; else if (diff > 0) diff --git a/src/plugins/preempt/partition_prio/preempt_partition_prio.c b/src/plugins/preempt/partition_prio/preempt_partition_prio.c index 300a5c9160a..620c0fc355b 100644 --- a/src/plugins/preempt/partition_prio/preempt_partition_prio.c +++ b/src/plugins/preempt/partition_prio/preempt_partition_prio.c @@ -153,9 +153,14 @@ static int _sort_by_prio (void *x, void *y) { int rc; uint32_t job_prio1, job_prio2; + struct job_record *j1; + struct job_record *j2; - job_prio1 = _gen_job_prio((struct job_record *) x); - job_prio2 = _gen_job_prio((struct job_record *) y); + j1 = *(struct job_record **)x; + j2 = *(struct job_record **)y; + + job_prio1 = _gen_job_prio(j1); + job_prio2 = _gen_job_prio(j2); if (job_prio1 > job_prio2) rc = 1; diff --git a/src/plugins/preempt/qos/preempt_qos.c b/src/plugins/preempt/qos/preempt_qos.c index af01632b1c2..9e4210842b7 100644 --- a/src/plugins/preempt/qos/preempt_qos.c +++ b/src/plugins/preempt/qos/preempt_qos.c @@ -170,9 +170,14 @@ static int _sort_by_prio (void *x, void *y) { int rc; uint32_t job_prio1, job_prio2; + struct job_record *j1; + struct job_record *j2; - job_prio1 = _gen_job_prio((struct job_record *) x); - job_prio2 = _gen_job_prio((struct job_record *) y); + j1 = *(struct job_record **)x; + j2 = *(struct job_record **)y; + + job_prio1 = _gen_job_prio(j1); + job_prio2 = _gen_job_prio(j2); if (job_prio1 > job_prio2) rc = 1; diff --git a/src/plugins/select/bluegene/bg_record_functions.c b/src/plugins/select/bluegene/bg_record_functions.c index 636bf960e39..4aa6939aded 100644 --- a/src/plugins/select/bluegene/bg_record_functions.c +++ b/src/plugins/select/bluegene/bg_record_functions.c @@ -456,10 +456,15 @@ extern void copy_bg_record(bg_record_t *fir_record, bg_record_t *sec_record) * returns: -1: rec_a > rec_b 0: rec_a == rec_b 1: rec_a < rec_b * */ -extern int bg_record_cmpf_inc(bg_record_t* rec_a, bg_record_t* rec_b) +extern int bg_record_cmpf_inc(void *r1, void *r2) { - int size_a = rec_a->cnode_cnt; - int size_b = rec_b->cnode_cnt; + bg_record_t *rec_a = *(bg_record_t **)r1; + bg_record_t *rec_b = *(bg_record_t **)r2; + int size_a; + int size_b; + + size_a = rec_a->cnode_cnt; + size_b = rec_b->cnode_cnt; /* We only look at this if we are ordering blocks larger than * a midplane, order of ionodes is how we order otherwise. */ @@ -496,8 +501,11 @@ extern int bg_record_cmpf_inc(bg_record_t* rec_a, bg_record_t* rec_b) * returns: -1: rec_a < rec_b 0: rec_a == rec_b 1: rec_a > rec_b * */ -extern int bg_record_sort_aval_inc(bg_record_t* rec_a, bg_record_t* rec_b) +extern int bg_record_sort_aval_inc(void *r1, void *r2) { + bg_record_t* rec_a = *(bg_record_t **)r1; + bg_record_t* rec_b = *(bg_record_t **)r2; + if ((rec_a->job_running == BLOCK_ERROR_STATE) && (rec_b->job_running != BLOCK_ERROR_STATE)) return 1; diff --git a/src/plugins/select/bluegene/bg_record_functions.h b/src/plugins/select/bluegene/bg_record_functions.h index 3ef4c76effc..bad871bc946 100644 --- a/src/plugins/select/bluegene/bg_record_functions.h +++ b/src/plugins/select/bluegene/bg_record_functions.h @@ -64,8 +64,8 @@ extern void destroy_bg_record(void *object); extern void process_nodes(bg_record_t *bg_reord, bool startup); extern List copy_bg_list(List in_list); extern void copy_bg_record(bg_record_t *fir_record, bg_record_t *sec_record); -extern int bg_record_cmpf_inc(bg_record_t *rec_a, bg_record_t *rec_b); -extern int bg_record_sort_aval_inc(bg_record_t* rec_a, bg_record_t* rec_b); +extern int bg_record_cmpf_inc(void *, void *); +extern int bg_record_sort_aval_inc(void *, void *); extern void setup_subblock_structs(bg_record_t *bg_record); /* change username of a block bg_record_t target_name needs to be diff --git a/src/plugins/select/cons_res/select_cons_res.c b/src/plugins/select/cons_res/select_cons_res.c index ab058643eb8..5b89db27b57 100644 --- a/src/plugins/select/cons_res/select_cons_res.c +++ b/src/plugins/select/cons_res/select_cons_res.c @@ -212,8 +212,8 @@ static int _run_now(struct job_record *job_ptr, bitstr_t *bitmap, uint32_t req_nodes, uint16_t job_node_req, List preemptee_candidates, List *preemptee_job_list, bitstr_t *exc_core_bitmap); -static int _sort_usable_nodes_dec(struct job_record *job_a, - struct job_record *job_b); +static int _sort_usable_nodes_dec(void *, void *); + static int _test_only(struct job_record *job_ptr, bitstr_t *bitmap, uint32_t min_nodes, uint32_t max_nodes, uint32_t req_nodes, uint16_t job_node_req); @@ -1492,9 +1492,11 @@ static int _test_only(struct job_record *job_ptr, bitstr_t *bitmap, * Sort the usable_node element to put jobs in the correct * preemption order. */ -static int _sort_usable_nodes_dec(struct job_record *job_a, - struct job_record *job_b) +static int _sort_usable_nodes_dec(void *j1, void *j2) { + struct job_record *job_a = *(struct job_record **)j1; + struct job_record *job_b = *(struct job_record **)j2; + if (job_a->details->usable_nodes > job_b->details->usable_nodes) return -1; else if (job_a->details->usable_nodes < job_b->details->usable_nodes) @@ -2663,7 +2665,7 @@ bitstr_t *sequential_pick(bitstr_t *avail_bitmap, uint32_t node_cnt, cores_in_node = 0; - /* First let's see in there are enough cores in + /* First let's see in there are enough cores in * this node */ for (i = 0; i < local_cores; i++) { if (bit_test(tmpcore, coff + i)) @@ -2672,7 +2674,7 @@ bitstr_t *sequential_pick(bitstr_t *avail_bitmap, uint32_t node_cnt, if (cores_in_node < cores_per_node) continue; - debug2("Using node %d (avail: %d, needed: %d)", + debug2("Using node %d (avail: %d, needed: %d)", inx, cores_in_node, cores_per_node); cores_in_node = 0; @@ -2805,7 +2807,7 @@ extern bitstr_t * select_p_resv_test(bitstr_t *avail_bitmap, uint32_t node_cnt, if (core_cnt && (*core_bitmap == NULL)) *core_bitmap = _make_core_bitmap_filtered(avail_bitmap, 0); - + rem_nodes = node_cnt; rem_cores = core_cnt[0]; @@ -2919,7 +2921,7 @@ extern bitstr_t * select_p_resv_test(bitstr_t *avail_bitmap, uint32_t node_cnt, if (switches_node_cnt[j] == 0) continue; if (core_cnt) { - sufficient = + sufficient = (switches_node_cnt[j] >= rem_nodes) && (switches_cpu_cnt[j] >= core_cnt[0]); } else @@ -2970,7 +2972,7 @@ extern bitstr_t * select_p_resv_test(bitstr_t *avail_bitmap, uint32_t node_cnt, } if (avail_cores_in_node < cores_per_node) continue; - + debug2("Using node %d with %d cores available", i, avail_cores_in_node); } @@ -2997,7 +2999,7 @@ fini: for (i=0; i<switch_record_cnt; i++) { xfree(switches_node_cnt); xfree(switches_required); - if (avail_nodes_bitmap && core_cnt) { + if (avail_nodes_bitmap && core_cnt) { /* Reservation is using partial nodes */ //char str[100]; bitstr_t *exc_core_bitmap = NULL; diff --git a/src/plugins/select/linear/select_linear.c b/src/plugins/select/linear/select_linear.c index b1622af730e..e7856089e44 100644 --- a/src/plugins/select/linear/select_linear.c +++ b/src/plugins/select/linear/select_linear.c @@ -154,8 +154,7 @@ static int _run_now(struct job_record *job_ptr, bitstr_t *bitmap, int max_share, uint32_t req_nodes, List preemptee_candidates, List *preemptee_job_list); -static int _sort_usable_nodes_dec(struct job_record *job_a, - struct job_record *job_b); +static int _sort_usable_nodes_dec(void *, void *); static bool _test_run_job(struct cr_record *cr_ptr, uint32_t job_id); static bool _test_tot_job(struct cr_record *cr_ptr, uint32_t job_id); static int _test_only(struct job_record *job_ptr, bitstr_t *bitmap, @@ -2271,7 +2270,7 @@ static void _init_node_cr(void) if (!bit_test(job_resrcs_ptr->node_bitmap, i)) continue; node_offset++; - if (!bit_test(job_ptr->node_bitmap, i)) + if (!bit_test(job_ptr->node_bitmap, i)) continue; /* node already released */ node_ptr = node_record_table_ptr + i; if (exclusive) @@ -2380,9 +2379,11 @@ static int _test_only(struct job_record *job_ptr, bitstr_t *bitmap, * Sort the usable_node element to put jobs in the correct * preemption order. */ -static int _sort_usable_nodes_dec(struct job_record *job_a, - struct job_record *job_b) +static int _sort_usable_nodes_dec(void *j1, void *j2) { + struct job_record *job_a = *(struct job_record **)j1; + struct job_record *job_b = *(struct job_record **)j2; + if (job_a->details->usable_nodes > job_b->details->usable_nodes) return -1; else if (job_a->details->usable_nodes < job_b->details->usable_nodes) @@ -2674,8 +2675,8 @@ static int _will_run_test(struct job_record *job_ptr, bitstr_t *bitmap, static int _cr_job_list_sort(void *x, void *y) { - struct job_record *job1_ptr = (struct job_record *) x; - struct job_record *job2_ptr = (struct job_record *) y; + struct job_record *job1_ptr = *(struct job_record **) x; + struct job_record *job2_ptr = *(struct job_record **) y; return (int) SLURM_DIFFTIME(job1_ptr->end_time, job2_ptr->end_time); } diff --git a/src/sacctmgr/common.c b/src/sacctmgr/common.c index 7091d12d07d..d2124107f3b 100644 --- a/src/sacctmgr/common.c +++ b/src/sacctmgr/common.c @@ -1552,10 +1552,13 @@ extern void sacctmgr_print_qos_limits(slurmdb_qos_rec_t *qos) } -extern int sort_coord_list(slurmdb_coord_rec_t *coord_a, - slurmdb_coord_rec_t *coord_b) +extern int sort_coord_list(void *a, void *b) { - int diff = strcmp(coord_a->name, coord_b->name); + slurmdb_coord_rec_t *coord_a = *(slurmdb_coord_rec_t **)a; + slurmdb_coord_rec_t *coord_b = *(slurmdb_coord_rec_t **)b; + int diff; + + diff = strcmp(coord_a->name, coord_b->name); if (diff < 0) return -1; diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h index 69bce88bb68..3a31353d459 100644 --- a/src/sacctmgr/sacctmgr.h +++ b/src/sacctmgr/sacctmgr.h @@ -268,8 +268,7 @@ extern void sacctmgr_print_qos_bitstr(print_field_t *field, List qos_list, extern void sacctmgr_print_assoc_limits(slurmdb_association_rec_t *assoc); extern void sacctmgr_print_qos_limits(slurmdb_qos_rec_t *qos); extern int sacctmgr_remove_assoc_usage(slurmdb_association_cond_t *assoc_cond); -extern int sort_coord_list(slurmdb_coord_rec_t *coord_a, - slurmdb_coord_rec_t *coord_b); +extern int sort_coord_list(void *, void *); extern List sacctmgr_process_format_list(List format_list); /* you need to free the objects returned from these functions */ diff --git a/src/sinfo/sort.c b/src/sinfo/sort.c index 76c88939a55..7b4c3cbb150 100644 --- a/src/sinfo/sort.c +++ b/src/sinfo/sort.c @@ -50,6 +50,7 @@ static bool reverse_order; static bool part_order; /* order same as in part table */ +static void _get_sinfo_from_void(sinfo_data_t **s1, sinfo_data_t **s2, void *v1, void *v2); static int _sort_by_avail(void *void1, void *void2); static int _sort_by_cpu_load(void *void1, void *void2); static int _sort_by_cpus(void *void1, void *void2); @@ -104,7 +105,7 @@ void sort_sinfo_list(List sinfo_list) if ((i > 0) && (params.sort[i-1] == '#')) part_order = true; - if (params.sort[i] == 'a') + if (params.sort[i] == 'a') list_sort(sinfo_list, _sort_by_avail); else if (params.sort[i] == 'A') list_sort(sinfo_list, _sort_by_nodes_ai); @@ -168,12 +169,22 @@ void sort_sinfo_list(List sinfo_list) /***************************************************************************** * Local Sort Functions *****************************************************************************/ + +static void +_get_sinfo_from_void(sinfo_data_t **s1, sinfo_data_t **s2, void *v1, void *v2) +{ + *s1 = *(sinfo_data_t **) v1; + *s2 = *(sinfo_data_t **) v2; +} + static int _sort_by_avail(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; int val1 = 0, val2 = 0; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); if (sinfo1->part_info) val1 = sinfo1->part_info->state_up; @@ -189,8 +200,10 @@ static int _sort_by_avail(void *void1, void *void2) static int _sort_by_cpu_load(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_cpu_load - sinfo2->min_cpu_load; @@ -202,8 +215,10 @@ static int _sort_by_cpu_load(void *void1, void *void2) static int _sort_by_cpus(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_cpus - sinfo2->min_cpus; @@ -215,8 +230,10 @@ static int _sort_by_cpus(void *void1, void *void2) static int _sort_by_sct(void *void1, void *void2) { int diffs, diffc, difft; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diffs = sinfo1->min_sockets - sinfo2->min_sockets; diffc = sinfo1->min_cores - sinfo2->min_cores; @@ -238,8 +255,10 @@ static int _sort_by_sct(void *void1, void *void2) static int _sort_by_sockets(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_sockets - sinfo2->min_sockets; @@ -251,8 +270,10 @@ static int _sort_by_sockets(void *void1, void *void2) static int _sort_by_cores(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_cores - sinfo2->min_cores; @@ -264,8 +285,10 @@ static int _sort_by_cores(void *void1, void *void2) static int _sort_by_threads(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_threads - sinfo2->min_threads; @@ -277,8 +300,10 @@ static int _sort_by_threads(void *void1, void *void2) static int _sort_by_disk(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_disk - sinfo2->min_disk; @@ -290,10 +315,12 @@ static int _sort_by_disk(void *void1, void *void2) static int _sort_by_features(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1 = "", *val2 = ""; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->features) val1 = sinfo1->features; if (sinfo2->features) @@ -308,10 +335,12 @@ static int _sort_by_features(void *void1, void *void2) static int _sort_by_groups(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1 = "", *val2 = ""; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info && sinfo1->part_info->allow_groups) val1 = sinfo1->part_info->allow_groups; if (sinfo2->part_info && sinfo2->part_info->allow_groups) @@ -326,13 +355,15 @@ static int _sort_by_groups(void *void1, void *void2) static int _sort_by_node_addr(void *void1, void *void2) { int diff = 0; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1, *val2; #if PURE_ALPHA_SORT == 0 int inx; #endif + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + val1 = hostlist_shift(sinfo1->node_addr); if (val1) { hostlist_push_host(sinfo1->node_addr, val1); @@ -381,13 +412,15 @@ static int _sort_by_node_addr(void *void1, void *void2) static int _sort_by_hostnames(void *void1, void *void2) { int diff = 0; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1, *val2; #if PURE_ALPHA_SORT == 0 int inx; #endif + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + val1 = hostlist_shift(sinfo1->hostnames); if (val1) { hostlist_push_host(sinfo1->hostnames, val1); @@ -436,10 +469,12 @@ static int _sort_by_hostnames(void *void1, void *void2) static int _sort_by_job_size(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; uint32_t val1 = 0, val2 = 0; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info) { val1 = sinfo1->part_info->max_nodes; if (val1 != INFINITE) @@ -460,10 +495,12 @@ static int _sort_by_job_size(void *void1, void *void2) static int _sort_by_max_time(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; uint32_t val1 = 0, val2 = 0; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info) val1 = sinfo1->part_info->max_time; if (sinfo2->part_info) @@ -478,8 +515,10 @@ static int _sort_by_max_time(void *void1, void *void2) static int _sort_by_memory(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_mem - sinfo2->min_mem; @@ -491,13 +530,15 @@ static int _sort_by_memory(void *void1, void *void2) static int _sort_by_node_list(void *void1, void *void2) { int diff = 0; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1, *val2; #if PURE_ALPHA_SORT == 0 int inx; #endif + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + val1 = hostlist_shift(sinfo1->nodes); if (val1) { hostlist_push_host(sinfo1->nodes, val1); @@ -546,8 +587,10 @@ static int _sort_by_node_list(void *void1, void *void2) static int _sort_by_nodes_ai(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->nodes_alloc - sinfo2->nodes_alloc; @@ -559,8 +602,10 @@ static int _sort_by_nodes_ai(void *void1, void *void2) static int _sort_by_nodes(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->nodes_total - sinfo2->nodes_total; @@ -572,10 +617,12 @@ static int _sort_by_nodes(void *void1, void *void2) static int _sort_by_partition(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1 = "", *val2 = ""; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (part_order) { diff = (int)sinfo1->part_inx - (int)sinfo2->part_inx; } else { @@ -594,10 +641,12 @@ static int _sort_by_partition(void *void1, void *void2) static int _sort_by_reason(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *val1 = "", *val2 = ""; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->reason) val1 = sinfo1->reason; if (sinfo2->reason) @@ -617,10 +666,12 @@ static int _sort_by_reason(void *void1, void *void2) static int _sort_by_reason_time(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; char *tmp, *val1 = "", *val2 = ""; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->reason) { tmp = strrchr(sinfo1->reason, '@'); if (tmp) @@ -645,10 +696,12 @@ static int _sort_by_reason_time(void *void1, void *void2) static int _sort_by_root(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; int val1 = 0, val2 = 0; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info) val1 = sinfo1->part_info->flags & PART_FLAG_ROOT_ONLY; if (sinfo2->part_info) @@ -663,10 +716,12 @@ static int _sort_by_root(void *void1, void *void2) static int _sort_by_share(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; int val1 = 0, val2 = 0; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info) val1 = sinfo1->part_info->max_share; if (sinfo2->part_info) @@ -681,10 +736,12 @@ static int _sort_by_share(void *void1, void *void2) static int _sort_by_preempt_mode(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; int val1 = 0, val2 = 0; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info) val1 = sinfo1->part_info->preempt_mode; if (sinfo2->part_info) @@ -699,10 +756,12 @@ static int _sort_by_preempt_mode(void *void1, void *void2) static int _sort_by_priority(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; int val1 = 0, val2 = 0; + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); + if (sinfo1->part_info) val1 = sinfo1->part_info->priority; if (sinfo2->part_info) @@ -717,8 +776,10 @@ static int _sort_by_priority(void *void1, void *void2) static int _sort_by_state(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = (int)sinfo1->node_state - (int)sinfo2->node_state; @@ -731,8 +792,10 @@ static int _sort_by_state(void *void1, void *void2) static int _sort_by_weight(void *void1, void *void2) { int diff; - sinfo_data_t *sinfo1 = (sinfo_data_t *) void1; - sinfo_data_t *sinfo2 = (sinfo_data_t *) void2; + sinfo_data_t *sinfo1; + sinfo_data_t *sinfo2; + + _get_sinfo_from_void(&sinfo1, &sinfo2, void1, void2); diff = sinfo1->min_weight - sinfo2->min_weight; diff --git a/src/slurmctld/gang.c b/src/slurmctld/gang.c index 006f70333a3..fcf6322671c 100644 --- a/src/slurmctld/gang.c +++ b/src/slurmctld/gang.c @@ -667,7 +667,7 @@ static void _preempt_job_dequeue(void) "requeued: %s", job_ptr->job_id, slurm_strerror(rc)); } - + if (rc != SLURM_SUCCESS) { rc = job_signal(job_ptr->job_id, SIGKILL, 0, 0, true); if (rc == SLURM_SUCCESS) @@ -687,8 +687,17 @@ static void _preempt_job_dequeue(void) * descending order rather than ascending order */ static int _sort_partitions(void *part1, void *part2) { - int prio1 = ((struct gs_part *) part1)->priority; - int prio2 = ((struct gs_part *) part2)->priority; + struct gs_part *g1; + struct gs_part *g2; + int prio1; + int prio2; + + g1 = *(struct gs_part **)part1; + g2 = *(struct gs_part **)part2; + + prio1 = g1->priority; + prio2 = g2->priority; + return prio2 - prio1; } diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c index 4f93a460e1e..f5837ce01f5 100644 --- a/src/slurmctld/job_scheduler.c +++ b/src/slurmctld/job_scheduler.c @@ -822,7 +822,7 @@ next_part: part_ptr = (struct part_record *) } } else { job_queue_rec = list_pop_bottom(job_queue, - sort_job_queue2); + sort_job_queue2); if (!job_queue_rec) break; job_ptr = job_queue_rec->job_ptr; @@ -1085,7 +1085,7 @@ next_part: part_ptr = (struct part_record *) } /* - * sort_job_queue - sort job_queue in decending priority order + * sort_job_queue - sort job_queue in descending priority order * IN/OUT job_queue - sorted job queue */ extern void sort_job_queue(List job_queue) @@ -1097,8 +1097,8 @@ extern void sort_job_queue(List job_queue) * in order of decreasing priority */ extern int sort_job_queue2(void *x, void *y) { - job_queue_rec_t *job_rec1 = (job_queue_rec_t *) x; - job_queue_rec_t *job_rec2 = (job_queue_rec_t *) y; + job_queue_rec_t *job_rec1 = *(job_queue_rec_t **) x; + job_queue_rec_t *job_rec2 = *(job_queue_rec_t **) y; bool has_resv1, has_resv2; static time_t config_update = 0; static bool preemption_enabled = true; diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c index a7dc02cde3e..2f6df24b8da 100644 --- a/src/slurmctld/node_mgr.c +++ b/src/slurmctld/node_mgr.c @@ -583,8 +583,15 @@ unpack_error: int list_compare_config (void *config_entry1, void *config_entry2) { int weight1, weight2; - weight1 = ((struct config_record *) config_entry1)->weight; - weight2 = ((struct config_record *) config_entry2)->weight; + struct config_record *c1; + struct config_record *c2; + + c1 = *(struct config_record **)config_entry1; + c2 = *(struct config_record **)config_entry2; + + weight1 = c1->weight; + weight2 = c2->weight; + return (weight1 - weight2); } diff --git a/src/squeue/sort.c b/src/squeue/sort.c index eed201241c0..ade1e435599 100644 --- a/src/squeue/sort.c +++ b/src/squeue/sort.c @@ -51,6 +51,8 @@ static bool reverse_order; +static void _get_job_info_from_void(job_info_t **j1, job_info_t **j2, void *v1, void *v2); +static void _get_step_info_from_void(job_step_info_t **j1, job_step_info_t **j2, void *v1, void *v2); static int _sort_job_by_batch_host(void *void1, void *void2); static int _sort_job_by_gres(void *void1, void *void2); static int _sort_job_by_group_id(void *void1, void *void2); @@ -111,7 +113,7 @@ void sort_job_list(List job_list) if ((i > 0) && (params.sort[i-1] == '-')) reverse_order = true; - if (params.sort[i] == 'B') + if (params.sort[i] == 'B') list_sort(job_list, _sort_job_by_batch_host); else if (params.sort[i] == 'b') list_sort(job_list, _sort_job_by_gres); @@ -229,13 +231,25 @@ void sort_step_list(List step_list) /***************************************************************************** * Local Job Sort Functions *****************************************************************************/ +static void _get_job_info_from_void(job_info_t **j1, job_info_t **j2, void *v1, void *v2) +{ + *j1 = *(job_info_t **)v1; + *j2 = *(job_info_t **)v2; +} +static void _get_step_info_from_void(job_step_info_t **s1, job_step_info_t **s2, void *v1, void *v2) +{ + *s1 = *(job_step_info_t **)v1; + *s2 = *(job_step_info_t **)v2; +} static int _sort_job_by_batch_host(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; char *val1 = "", *val2 = ""; + _get_job_info_from_void(&job1, &job2, void1, void2); + if (job1->batch_host) val1 = job1->batch_host; if (job2->batch_host) @@ -250,10 +264,12 @@ static int _sort_job_by_batch_host(void *void1, void *void2) static int _sort_job_by_gres(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; char *val1 = "", *val2 = ""; + _get_job_info_from_void(&job1, &job2, void1, void2); + if (job1->gres) val1 = job1->gres; if (job2->gres) @@ -268,8 +284,10 @@ static int _sort_job_by_gres(void *void1, void *void2) static int _sort_job_by_group_id(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->group_id - job2->group_id; @@ -281,11 +299,13 @@ static int _sort_job_by_group_id(void *void1, void *void2) static int _sort_job_by_group_name(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; struct group *group_info = NULL; char *name1 = "", *name2 = ""; + _get_job_info_from_void(&job1, &job2, void1, void2); + if ((group_info = getgrgid((gid_t) job1->group_id))) name1 = group_info->gr_name; if ((group_info = getgrgid((gid_t) job2->group_id))) @@ -300,8 +320,10 @@ static int _sort_job_by_group_name(void *void1, void *void2) static int _sort_job_by_id(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->job_id - job2->job_id; @@ -313,10 +335,12 @@ static int _sort_job_by_id(void *void1, void *void2) static int _sort_job_by_name(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; char *val1 = "", *val2 = ""; + _get_job_info_from_void(&job1, &job2, void1, void2); + if (job1->name) val1 = job1->name; if (job2->name) @@ -331,14 +355,16 @@ static int _sort_job_by_name(void *void1, void *void2) static int _sort_job_by_node_list(void *void1, void *void2) { int diff = 0; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; hostlist_t hostlist1, hostlist2; char *val1, *val2; #if PURE_ALPHA_SORT == 0 int inx; #endif + _get_job_info_from_void(&job1, &job2, void1, void2); + hostlist1 = hostlist_create(job1->nodes); hostlist_sort(hostlist1); val1 = hostlist_shift(hostlist1); @@ -386,8 +412,10 @@ static int _sort_job_by_node_list(void *void1, void *void2) static int _sort_job_by_num_nodes(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->num_nodes - job2->num_nodes; @@ -399,8 +427,10 @@ static int _sort_job_by_num_nodes(void *void1, void *void2) static int _sort_job_by_num_cpus(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->num_cpus - job2->num_cpus; @@ -412,8 +442,10 @@ static int _sort_job_by_num_cpus(void *void1, void *void2) static int _sort_job_by_num_sct(void *void1, void *void2) { int diffs, diffc, difft; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diffs = job1->sockets_per_node - job2->sockets_per_node; diffc = job1->cores_per_socket - job2->cores_per_socket; @@ -435,8 +467,10 @@ static int _sort_job_by_num_sct(void *void1, void *void2) static int _sort_job_by_sockets(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->sockets_per_node - job2->sockets_per_node; @@ -448,8 +482,10 @@ static int _sort_job_by_sockets(void *void1, void *void2) static int _sort_job_by_cores(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->cores_per_socket - job2->cores_per_socket; @@ -461,8 +497,10 @@ static int _sort_job_by_cores(void *void1, void *void2) static int _sort_job_by_threads(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->threads_per_core - job2->threads_per_core; @@ -474,8 +512,10 @@ static int _sort_job_by_threads(void *void1, void *void2) static int _sort_job_by_min_memory(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); job1->pn_min_memory &= (~MEM_PER_CPU); job2->pn_min_memory &= (~MEM_PER_CPU); @@ -489,8 +529,10 @@ static int _sort_job_by_min_memory(void *void1, void *void2) static int _sort_job_by_min_tmp_disk(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->pn_min_tmp_disk - job2->pn_min_tmp_disk; @@ -502,8 +544,10 @@ static int _sort_job_by_min_tmp_disk(void *void1, void *void2) static int _sort_job_by_state(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = strcmp(job_state_string(job1->job_state), job_state_string(job2->job_state)); @@ -516,11 +560,13 @@ static int _sort_job_by_state(void *void1, void *void2) static int _sort_job_by_state_compact(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = strcmp(job_state_string_compact(job1->job_state), - job_state_string_compact(job2->job_state)); + job_state_string_compact(job2->job_state)); if (reverse_order) diff = -diff; @@ -530,8 +576,10 @@ static int _sort_job_by_state_compact(void *void1, void *void2) static int _sort_job_by_time_end(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->end_time - job2->end_time; @@ -543,10 +591,12 @@ static int _sort_job_by_time_end(void *void1, void *void2) static int _sort_job_by_time_left(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; time_t time1, time2; + _get_job_info_from_void(&job1, &job2, void1, void2); + if ((job1->time_limit == INFINITE) || (job1->time_limit == NO_VAL)) time1 = INFINITE; else @@ -570,8 +620,10 @@ static int _sort_job_by_time_left(void *void1, void *void2) static int _sort_job_by_time_limit(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); if (job1->time_limit > job2->time_limit) diff = 1; @@ -597,10 +649,12 @@ static uint32_t _get_start_time(job_info_t *job) static int _sort_job_by_time_start(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; uint32_t start_time1, start_time2; + _get_job_info_from_void(&job1, &job2, void1, void2); + start_time1 = _get_start_time(job1); start_time2 = _get_start_time(job2); @@ -619,10 +673,12 @@ static int _sort_job_by_time_start(void *void1, void *void2) static int _sort_job_by_time_used(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; long time1, time2; + _get_job_info_from_void(&job1, &job2, void1, void2); + time1 = job_time_used(job1); time2 = job_time_used(job2); diff = time1 - time2; @@ -635,10 +691,12 @@ static int _sort_job_by_time_used(void *void1, void *void2) static int _sort_job_by_partition(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; char *val1 = "", *val2 = ""; + _get_job_info_from_void(&job1, &job2, void1, void2); + if (job1->partition) val1 = job1->partition; if (job2->partition) @@ -653,8 +711,10 @@ static int _sort_job_by_partition(void *void1, void *void2) static int _sort_job_by_priority(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->priority - job2->priority; @@ -666,8 +726,10 @@ static int _sort_job_by_priority(void *void1, void *void2) static int _sort_job_by_user_id(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; + + _get_job_info_from_void(&job1, &job2, void1, void2); diff = job1->user_id - job2->user_id; @@ -679,10 +741,12 @@ static int _sort_job_by_user_id(void *void1, void *void2) static int _sort_job_by_user_name(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; char *name1, *name2; + _get_job_info_from_void(&job1, &job2, void1, void2); + name1 = uid_to_string((uid_t) job1->user_id); name2 = uid_to_string((uid_t) job2->user_id); diff = strcmp(name1, name2); @@ -697,10 +761,12 @@ static int _sort_job_by_user_name(void *void1, void *void2) static int _sort_job_by_reservation(void *void1, void *void2) { int diff; - job_info_t *job1 = (job_info_t *) void1; - job_info_t *job2 = (job_info_t *) void2; + job_info_t *job1; + job_info_t *job2; char *val1 = "", *val2 = ""; + _get_job_info_from_void(&job1, &job2, void1, void2); + if (job1->resv_name) val1 = job1->resv_name; if (job2->resv_name) @@ -718,10 +784,12 @@ static int _sort_job_by_reservation(void *void1, void *void2) static int _sort_step_by_gres(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; char *val1 = "", *val2 = ""; + _get_step_info_from_void(&step1, &step2, void1, void2); + if (step1->gres) val1 = step1->gres; if (step2->gres) @@ -736,8 +804,10 @@ static int _sort_step_by_gres(void *void1, void *void2) static int _sort_step_by_id(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; + + _get_step_info_from_void(&step1, &step2, void1, void2); diff = step1->job_id - step2->job_id; if (diff == 0) @@ -751,8 +821,8 @@ static int _sort_step_by_id(void *void1, void *void2) static int _sort_step_by_node_list(void *void1, void *void2) { int diff = 0; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; hostlist_t hostlist1, hostlist2; char *val1, *val2; @@ -760,6 +830,8 @@ static int _sort_step_by_node_list(void *void1, void *void2) int inx; #endif + _get_step_info_from_void(&step1, &step2, void1, void2); + hostlist1 = hostlist_create(step1->nodes); hostlist_sort(hostlist1); val1 = hostlist_shift(hostlist1); @@ -807,10 +879,12 @@ static int _sort_step_by_node_list(void *void1, void *void2) static int _sort_step_by_partition(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; char *val1 = "", *val2 = ""; + _get_step_info_from_void(&step1, &step2, void1, void2); + if (step1->partition) val1 = step1->partition; if (step2->partition) @@ -825,8 +899,10 @@ static int _sort_step_by_partition(void *void1, void *void2) static int _sort_step_by_time_limit(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; + + _get_step_info_from_void(&step1, &step2, void1, void2); diff = step1->time_limit - step2->time_limit; @@ -838,8 +914,10 @@ static int _sort_step_by_time_limit(void *void1, void *void2) static int _sort_step_by_time_start(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; + + _get_step_info_from_void(&step1, &step2, void1, void2); diff = step1->start_time - step2->start_time; @@ -851,10 +929,12 @@ static int _sort_step_by_time_start(void *void1, void *void2) static int _sort_step_by_time_used(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; time_t used1, used2; + _get_step_info_from_void(&step1, &step2, void1, void2); + used1 = difftime(now, step1->start_time); used2 = difftime(now, step2->start_time); diff = used1 - used2; @@ -867,8 +947,10 @@ static int _sort_step_by_time_used(void *void1, void *void2) static int _sort_step_by_user_id(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; + + _get_step_info_from_void(&step1, &step2, void1, void2); diff = step1->user_id - step2->user_id; @@ -880,10 +962,12 @@ static int _sort_step_by_user_id(void *void1, void *void2) static int _sort_step_by_user_name(void *void1, void *void2) { int diff; - job_step_info_t *step1 = (job_step_info_t *) void1; - job_step_info_t *step2 = (job_step_info_t *) void2; + job_step_info_t *step1; + job_step_info_t *step2; char *name1, *name2; + _get_step_info_from_void(&step1, &step2, void1, void2); + name1 = uid_to_string((uid_t) step1->user_id); name2 = uid_to_string((uid_t) step2->user_id); diff = strcmp(name1, name2); diff --git a/src/sreport/common.c b/src/sreport/common.c index 6507494fabe..b02de5d3d07 100644 --- a/src/sreport/common.c +++ b/src/sreport/common.c @@ -232,10 +232,15 @@ extern void addto_char_list(List char_list, char *names) * returns: 1: user_a > user_b 0: user_a == user_b -1: user_a < user_b * */ -extern int sort_user_dec(slurmdb_report_user_rec_t *user_a, - slurmdb_report_user_rec_t *user_b) +extern int sort_user_dec(void *v1, void *v2) { - int diff = 0; + slurmdb_report_user_rec_t *user_a; + slurmdb_report_user_rec_t *user_b; + int diff; + + diff = 0; + user_a = *(slurmdb_report_user_rec_t **)v1; + user_b = *(slurmdb_report_user_rec_t **)v2; if (sort_flag == SLURMDB_REPORT_SORT_TIME) { if (user_a->cpu_secs > user_b->cpu_secs) @@ -255,6 +260,7 @@ extern int sort_user_dec(slurmdb_report_user_rec_t *user_a, return -1; return 0; + } /* @@ -265,10 +271,14 @@ extern int sort_user_dec(slurmdb_report_user_rec_t *user_a, * -1: cluster_a < cluster_b * */ -extern int sort_cluster_dec(slurmdb_report_cluster_rec_t *cluster_a, - slurmdb_report_cluster_rec_t *cluster_b) +extern int sort_cluster_dec(void *v1, void *v2) { int diff = 0; + slurmdb_report_cluster_rec_t *cluster_a; + slurmdb_report_cluster_rec_t *cluster_b; + + cluster_a = *(slurmdb_report_cluster_rec_t **)v1; + cluster_b = *(slurmdb_report_cluster_rec_t **)v2; if (!cluster_a->name || !cluster_b->name) return 0; @@ -293,10 +303,14 @@ extern int sort_cluster_dec(slurmdb_report_cluster_rec_t *cluster_a, * 1: assoc_a < assoc_b * */ -extern int sort_assoc_dec(slurmdb_report_assoc_rec_t *assoc_a, - slurmdb_report_assoc_rec_t *assoc_b) +extern int sort_assoc_dec(void *v1, void *v2) { int diff = 0; + slurmdb_report_assoc_rec_t *assoc_a; + slurmdb_report_assoc_rec_t *assoc_b; + + assoc_a = *(slurmdb_report_assoc_rec_t **)v1; + assoc_b = *(slurmdb_report_assoc_rec_t **)v2; if (!assoc_a->acct || !assoc_b->acct) return 0; @@ -330,10 +344,14 @@ extern int sort_assoc_dec(slurmdb_report_assoc_rec_t *assoc_a, * returns: 1: resv_a > resv_b 0: resv_a == resv_b -1: resv_a < resv_b * */ -extern int sort_reservations_dec(slurmdb_reservation_rec_t *resv_a, - slurmdb_reservation_rec_t *resv_b) +extern int sort_reservations_dec(void *v1, void *v2) { int diff = 0; + slurmdb_reservation_rec_t *resv_a; + slurmdb_reservation_rec_t *resv_b; + + resv_a = *(slurmdb_reservation_rec_t **)v1; + resv_b = *(slurmdb_reservation_rec_t **)v2; if (!resv_a->cluster || !resv_b->cluster) return 0; diff --git a/src/sreport/job_reports.c b/src/sreport/job_reports.c index 46455200b13..cae78bfd3d6 100644 --- a/src/sreport/job_reports.c +++ b/src/sreport/job_reports.c @@ -67,11 +67,14 @@ static bool individual_grouping = 0; * -1: cluster_a < cluster_b * */ -static int _sort_cluster_grouping_dec( - slurmdb_report_cluster_grouping_t *cluster_a, - slurmdb_report_cluster_grouping_t *cluster_b) +static int _sort_cluster_grouping_dec(void *v1, void *v2) { int diff = 0; + slurmdb_report_cluster_grouping_t *cluster_a; + slurmdb_report_cluster_grouping_t *cluster_b; + + cluster_a = *(slurmdb_report_cluster_grouping_t **)v1; + cluster_b = *(slurmdb_report_cluster_grouping_t **)v2; if (!cluster_a->cluster || !cluster_b->cluster) return 0; @@ -94,14 +97,17 @@ static int _sort_cluster_grouping_dec( * -1: acct_a < acct_b * */ -static int _sort_acct_grouping_dec(slurmdb_report_acct_grouping_t *acct_a, - slurmdb_report_acct_grouping_t *acct_b) +static int _sort_acct_grouping_dec(void *v1, void *v2) { int diff = 0; - char tmp_acct_a[200]; char tmp_acct_b[200]; char *wckey_a = NULL, *wckey_b = NULL; + slurmdb_report_acct_grouping_t *acct_a; + slurmdb_report_acct_grouping_t *acct_b; + + acct_a = *(slurmdb_report_acct_grouping_t **)v1; + acct_b = *(slurmdb_report_acct_grouping_t **)v2; if (!acct_a->acct || !acct_b->acct) return 0; @@ -679,12 +685,12 @@ extern int job_sizes_grouped_by_top_acct(int argc, char *argv[]) itr = list_iterator_create(print_fields_list); itr2 = list_iterator_create(grouping_print_fields_list); list_sort(slurmdb_report_cluster_grouping_list, - (ListCmpF)_sort_cluster_grouping_dec); + (ListCmpF)_sort_cluster_grouping_dec); cluster_itr = list_iterator_create(slurmdb_report_cluster_grouping_list); while((cluster_group = list_next(cluster_itr))) { list_sort(cluster_group->acct_list, - (ListCmpF)_sort_acct_grouping_dec); + (ListCmpF)_sort_acct_grouping_dec); acct_itr = list_iterator_create(cluster_group->acct_list); while((acct_group = list_next(acct_itr))) { @@ -887,12 +893,12 @@ extern int job_sizes_grouped_by_wckey(int argc, char *argv[]) itr = list_iterator_create(print_fields_list); itr2 = list_iterator_create(grouping_print_fields_list); list_sort(slurmdb_report_cluster_grouping_list, - (ListCmpF)_sort_cluster_grouping_dec); + (ListCmpF)_sort_cluster_grouping_dec); cluster_itr = list_iterator_create( slurmdb_report_cluster_grouping_list); while((cluster_group = list_next(cluster_itr))) { list_sort(cluster_group->acct_list, - (ListCmpF)_sort_acct_grouping_dec); + (ListCmpF)_sort_acct_grouping_dec); acct_itr = list_iterator_create(cluster_group->acct_list); while((acct_group = list_next(acct_itr))) { diff --git a/src/sreport/sreport.h b/src/sreport/sreport.h index 51bb1ad0a58..d2ec5a45384 100644 --- a/src/sreport/sreport.h +++ b/src/sreport/sreport.h @@ -104,14 +104,10 @@ extern void slurmdb_report_print_time(print_field_t *field, uint64_t value, uint64_t total_time, int last); extern int parse_option_end(char *option); extern char *strip_quotes(char *option, int *increased); -extern int sort_user_dec(slurmdb_report_user_rec_t *user_a, - slurmdb_report_user_rec_t *user_b); -extern int sort_cluster_dec(slurmdb_report_cluster_rec_t *cluster_a, - slurmdb_report_cluster_rec_t *cluster_b); -extern int sort_assoc_dec(slurmdb_report_assoc_rec_t *assoc_a, - slurmdb_report_assoc_rec_t *assoc_b); -extern int sort_reservations_dec(slurmdb_reservation_rec_t *resv_a, - slurmdb_reservation_rec_t *resv_b); +extern int sort_user_dec(void *, void *); +extern int sort_cluster_dec(void *, void *); +extern int sort_assoc_dec(void *, void *); +extern int sort_reservations_dec(void *, void *); extern int get_uint(char *in_value, uint32_t *out_value, char *type); diff --git a/src/sview/block_info.c b/src/sview/block_info.c index af63b7106d9..cb85533f3b1 100644 --- a/src/sview/block_info.c +++ b/src/sview/block_info.c @@ -504,11 +504,15 @@ static void _update_info_block(List block_list, last_model = model; } -static int _sview_block_sort_aval_dec(sview_block_info_t* rec_a, - sview_block_info_t* rec_b) +static int _sview_block_sort_aval_dec(void *s1, void *s2) { - int size_a = rec_a->cnode_cnt; - int size_b = rec_b->cnode_cnt; + sview_block_info_t *rec_a = *(sview_block_info_t **)s1; + sview_block_info_t *rec_b = *(sview_block_info_t **)s2; + int size_a; + int size_b; + + size_a = rec_a->cnode_cnt; + size_b = rec_b->cnode_cnt; if (list_count(rec_a->job_list) < list_count(rec_b->job_list)) return 1; diff --git a/src/sview/grid.c b/src/sview/grid.c index 1a5dc175724..6a755b347ee 100644 --- a/src/sview/grid.c +++ b/src/sview/grid.c @@ -198,10 +198,15 @@ static void _add_button_signals(grid_button_t *grid_button) * 1: rec_a < rec_b * */ -static int _sort_button_inx(grid_button_t *button_a, grid_button_t *button_b) +static int _sort_button_inx(void *b1, void *b2) { - int inx_a = button_a->inx; - int inx_b = button_b->inx; + grid_button_t *button_a = *(grid_button_t **)b1; + grid_button_t *button_b = *(grid_button_t **)b2; + int inx_a; + int inx_b; + + inx_a = button_a->inx; + inx_b = button_b->inx; if (inx_a < inx_b) return -1; diff --git a/src/sview/job_info.c b/src/sview/job_info.c index b28540b6f93..23ff1f544d8 100644 --- a/src/sview/job_info.c +++ b/src/sview/job_info.c @@ -2610,11 +2610,15 @@ static void _update_info_job(List info_list, return; } -static int _sview_job_sort_aval_dec(sview_job_info_t* rec_a, - sview_job_info_t* rec_b) +static int _sview_job_sort_aval_dec(void *s1, void *s2) { - int size_a = rec_a->node_cnt; - int size_b = rec_b->node_cnt; + sview_job_info_t* rec_a = *(sview_job_info_t **)s1; + sview_job_info_t* rec_b = *(sview_job_info_t **)s2; + int size_a; + int size_b; + + size_a = rec_a->node_cnt; + size_b = rec_b->node_cnt; if (size_a < size_b) return -1; diff --git a/src/sview/part_info.c b/src/sview/part_info.c index 5c541e4770a..2a71fa9ec23 100644 --- a/src/sview/part_info.c +++ b/src/sview/part_info.c @@ -1656,11 +1656,15 @@ static int _insert_sview_part_sub(sview_part_info_t *sview_part_info, return SLURM_SUCCESS; } -static int _sview_part_sort_aval_dec(sview_part_info_t* rec_a, - sview_part_info_t* rec_b) +static int _sview_part_sort_aval_dec(void *a, void *b) { - int size_a = rec_a->part_ptr->total_nodes; - int size_b = rec_b->part_ptr->total_nodes; + sview_part_info_t *rec_a = *(sview_part_info_t **)a; + sview_part_info_t *rec_b = *(sview_part_info_t **)b; + int size_a; + int size_b; + + size_a = rec_a->part_ptr->total_nodes; + size_b = rec_b->part_ptr->total_nodes; if (size_a < size_b) return -1; @@ -1677,11 +1681,15 @@ static int _sview_part_sort_aval_dec(sview_part_info_t* rec_a, return 0; } -static int _sview_sub_part_sort(sview_part_sub_t* rec_a, - sview_part_sub_t* rec_b) +static int _sview_sub_part_sort(void *a, void *b) { - int size_a = rec_a->node_state & NODE_STATE_BASE; - int size_b = rec_b->node_state & NODE_STATE_BASE; + sview_part_sub_t *rec_a = *(sview_part_sub_t **)a; + sview_part_sub_t *rec_b = *(sview_part_sub_t **)b; + int size_a; + int size_b; + + size_a = rec_a->node_state & NODE_STATE_BASE; + size_b = rec_b->node_state & NODE_STATE_BASE; if (size_a < size_b) return -1; diff --git a/src/sview/resv_info.c b/src/sview/resv_info.c index 31a86f84fbf..0e2b116a510 100644 --- a/src/sview/resv_info.c +++ b/src/sview/resv_info.c @@ -713,11 +713,15 @@ static void _update_info_resv(List info_list, last_model = model; } -static int _sview_resv_sort_aval_dec(sview_resv_info_t* rec_a, - sview_resv_info_t* rec_b) +static int _sview_resv_sort_aval_dec(void *s1, void *s2) { - int size_a = rec_a->resv_ptr->node_cnt; - int size_b = rec_b->resv_ptr->node_cnt; + sview_resv_info_t *rec_a = *(sview_resv_info_t **)s1; + sview_resv_info_t *rec_b = *(sview_resv_info_t **)s2; + int size_a; + int size_b; + + size_a = rec_a->resv_ptr->node_cnt; + size_b = rec_b->resv_ptr->node_cnt; if (size_a < size_b) return -1; -- GitLab