library: overcome effect of copy/paste, <SLABINFO> api
Needless to say, when one copies and then pastes, it's always better when those results are refined somewhat. The qsort callback declarations used the wrong results type and 2 of their 3 input parameters were wrong too. So this patch will fix that & generalize declarations. [ plus add comment guidance about noop & extra enums ] [ & provide for 'noop' sorting, as is done in <PIDS> ] Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
f897a495ee
commit
6a70466ae5
@ -133,7 +133,6 @@ struct procps_slabinfo {
|
|||||||
|
|
||||||
// ___ Results 'Set' Support ||||||||||||||||||||||||||||||||||||||||||||||||||
|
// ___ Results 'Set' Support ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
|
||||||
|
|
||||||
#define setNAME(e) set_results_ ## e
|
#define setNAME(e) set_results_ ## e
|
||||||
#define setDECL(e) static void setNAME(e) \
|
#define setDECL(e) static void setNAME(e) \
|
||||||
(struct slabinfo_result *R, struct slabs_hist *S, struct slabs_node *N)
|
(struct slabinfo_result *R, struct slabs_hist *S, struct slabs_node *N)
|
||||||
@ -184,6 +183,11 @@ NOD_set(SLABNODE_ASLABS, u_int, nr_active_slabs)
|
|||||||
NOD_set(SLABNODE_USE, u_int, use)
|
NOD_set(SLABNODE_USE, u_int, use)
|
||||||
NOD_set(SLABNODE_SIZE, ul_int, cache_size)
|
NOD_set(SLABNODE_SIZE, ul_int, cache_size)
|
||||||
|
|
||||||
|
#undef setDECL
|
||||||
|
#undef REG_set
|
||||||
|
#undef NOD_set
|
||||||
|
#undef HST_set
|
||||||
|
|
||||||
|
|
||||||
// ___ Results 'Get' Support ||||||||||||||||||||||||||||||||||||||||||||||||||
|
// ___ Results 'Get' Support ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
|
||||||
@ -238,6 +242,11 @@ NOT_get(SLABNODE_ASLABS)
|
|||||||
NOT_get(SLABNODE_USE)
|
NOT_get(SLABNODE_USE)
|
||||||
NOT_get(SLABNODE_SIZE)
|
NOT_get(SLABNODE_SIZE)
|
||||||
|
|
||||||
|
#undef getDECL
|
||||||
|
#undef REG_get
|
||||||
|
#undef HST_get
|
||||||
|
#undef NOT_get
|
||||||
|
|
||||||
|
|
||||||
// ___ Sorting Support ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
// ___ Sorting Support ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
|
||||||
@ -246,33 +255,38 @@ struct sort_parms {
|
|||||||
enum slabinfo_sort_order order;
|
enum slabinfo_sort_order order;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define srtNAME(e) sort_results_ ## e
|
#define srtNAME(t) sort_results_ ## t
|
||||||
|
#define srtDECL(t) static int srtNAME(t) \
|
||||||
|
(const struct slabinfo_stack **A, const struct slabinfo_stack **B, struct sort_parms *P)
|
||||||
|
|
||||||
#define REG_srt(T) static int srtNAME(T) ( \
|
srtDECL(u_int) {
|
||||||
const struct pids_stack **A, const struct pids_stack **B, struct sort_parms *P) { \
|
const struct slabinfo_result *a = (*A)->head + P->offset; \
|
||||||
const struct pids_result *a = (*A)->head + P->offset; \
|
const struct slabinfo_result *b = (*B)->head + P->offset; \
|
||||||
const struct pids_result *b = (*B)->head + P->offset; \
|
if ( a->result.u_int > b->result.u_int ) return P->order > 0 ? 1 : -1; \
|
||||||
if ( a->result. T > b->result. T ) return P->order > 0 ? 1 : -1; \
|
if ( a->result.u_int < b->result.u_int ) return P->order > 0 ? -1 : 1; \
|
||||||
if ( a->result. T < b->result. T ) return P->order > 0 ? -1 : 1; \
|
|
||||||
return 0; }
|
|
||||||
|
|
||||||
REG_srt(u_int)
|
|
||||||
REG_srt(ul_int)
|
|
||||||
|
|
||||||
static int srtNAME(str) (
|
|
||||||
const struct pids_stack **A, const struct pids_stack **B, struct sort_parms *P) {
|
|
||||||
const struct pids_result *a = (*A)->head + P->offset;
|
|
||||||
const struct pids_result *b = (*B)->head + P->offset;
|
|
||||||
return P->order * strcoll(a->result.str, b->result.str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int srtNAME(noop) (
|
|
||||||
const struct pids_stack **A, const struct pids_stack **B, enum pids_item *O) {
|
|
||||||
(void)A; (void)B; (void)O;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef REG_srt
|
srtDECL(ul_int) {
|
||||||
|
const struct slabinfo_result *a = (*A)->head + P->offset; \
|
||||||
|
const struct slabinfo_result *b = (*B)->head + P->offset; \
|
||||||
|
if ( a->result.ul_int > b->result.ul_int ) return P->order > 0 ? 1 : -1; \
|
||||||
|
if ( a->result.ul_int < b->result.ul_int ) return P->order > 0 ? -1 : 1; \
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
srtDECL(str) {
|
||||||
|
const struct slabinfo_result *a = (*A)->head + P->offset;
|
||||||
|
const struct slabinfo_result *b = (*B)->head + P->offset;
|
||||||
|
return P->order * strcoll(a->result.str, b->result.str);
|
||||||
|
}
|
||||||
|
|
||||||
|
srtDECL(noop) { \
|
||||||
|
(void)A; (void)B; (void)P; \
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef srtDECL
|
||||||
|
|
||||||
|
|
||||||
// ___ Controlling Table ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
// ___ Controlling Table ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
@ -297,7 +311,7 @@ static struct {
|
|||||||
} Item_table[] = {
|
} Item_table[] = {
|
||||||
/* setsfunc getsfunc sortfunc
|
/* setsfunc getsfunc sortfunc
|
||||||
--------------------------- --------------------------- --------- */
|
--------------------------- --------------------------- --------- */
|
||||||
{ RS(noop), RG(noop), QS(noop) },
|
{ RS(noop), RG(noop), QS(ul_int) },
|
||||||
{ RS(extra), RG(extra), QS(noop) },
|
{ RS(extra), RG(extra), QS(noop) },
|
||||||
|
|
||||||
{ RS(SLABS_OBJS), RG(SLABS_OBJS), QS(noop) },
|
{ RS(SLABS_OBJS), RG(SLABS_OBJS), QS(noop) },
|
||||||
@ -345,15 +359,7 @@ static struct {
|
|||||||
enum slabinfo_item PROCPS_SLABINFO_logical_end = PROCPS_SLABNODE_SIZE + 1;
|
enum slabinfo_item PROCPS_SLABINFO_logical_end = PROCPS_SLABNODE_SIZE + 1;
|
||||||
|
|
||||||
#undef setNAME
|
#undef setNAME
|
||||||
#undef setDECL
|
|
||||||
#undef REG_set
|
|
||||||
#undef NOD_set
|
|
||||||
#undef HST_set
|
|
||||||
#undef getNAME
|
#undef getNAME
|
||||||
#undef getDECL
|
|
||||||
#undef REG_get
|
|
||||||
#undef HST_get
|
|
||||||
#undef NOT_get
|
|
||||||
#undef srtNAME
|
#undef srtNAME
|
||||||
#undef RS
|
#undef RS
|
||||||
#undef RG
|
#undef RG
|
||||||
@ -940,7 +946,7 @@ PROCPS_EXPORT signed long procps_slabinfo_get (
|
|||||||
* Harvest all the requested SLABNODE information providing the
|
* Harvest all the requested SLABNODE information providing the
|
||||||
* result stacks along with totals via the reap summary.
|
* result stacks along with totals via the reap summary.
|
||||||
*
|
*
|
||||||
* Returns: pointer to a stat_reaped struct on success, NULL on error.
|
* Returns: pointer to a slabinfo_reap struct on success, NULL on error.
|
||||||
*/
|
*/
|
||||||
PROCPS_EXPORT struct slabinfo_reap *procps_slabinfo_reap (
|
PROCPS_EXPORT struct slabinfo_reap *procps_slabinfo_reap (
|
||||||
struct procps_slabinfo *info,
|
struct procps_slabinfo *info,
|
||||||
|
@ -28,8 +28,8 @@
|
|||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
enum slabinfo_item {
|
enum slabinfo_item {
|
||||||
PROCPS_SLABINFO_noop, // n/a
|
PROCPS_SLABINFO_noop, // ( never altered )
|
||||||
PROCPS_SLABINFO_extra, // n/a
|
PROCPS_SLABINFO_extra, // ( reset to zero )
|
||||||
|
|
||||||
PROCPS_SLABS_OBJS, // u_int
|
PROCPS_SLABS_OBJS, // u_int
|
||||||
PROCPS_SLABS_AOBJS, // u_int
|
PROCPS_SLABS_AOBJS, // u_int
|
||||||
|
Loading…
Reference in New Issue
Block a user