diff --git a/SOURCES/0143-lsmem-make-split-optional-follow-output-by-default.patch b/SOURCES/0143-lsmem-make-split-optional-follow-output-by-default.patch new file mode 100644 index 00000000..ee4497a2 --- /dev/null +++ b/SOURCES/0143-lsmem-make-split-optional-follow-output-by-default.patch @@ -0,0 +1,118 @@ +From 66d819dc82080e9dba609b3bfff45c14d7c3ba3c Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Fri, 3 Nov 2017 10:58:33 +0100 +Subject: [PATCH] lsmem: make --split optional, follow output by default + +Let's keep lsmem backwardly compatible (<=v2.30) and create ranges +according to the output columns by default. This default behavior may +be modified by --split command line option. + +Upstream: http://github.com/karelzak/util-linux/commit/96cbe362c034305e5f12a912b4247b3321420ee7 +Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1496421 +Signed-off-by: Karel Zak +--- + sys-utils/lsmem.1 | 14 ++++++-------- + sys-utils/lsmem.c | 49 ++++++++++++++++++++++++++++++------------------- + 2 files changed, 36 insertions(+), 27 deletions(-) + +diff --git a/sys-utils/lsmem.1 b/sys-utils/lsmem.1 +index 3f5cd7d4b..bfe312bfc 100644 +--- a/sys-utils/lsmem.1 ++++ b/sys-utils/lsmem.1 +@@ -16,14 +16,12 @@ Always explicitly define expected columns by using the \fB\-\-output\fR option + together with a columns list in environments where a stable output is required. + + The \fBlsmem\fP command lists a new memory range always when the current memory +-block distinguish from the previous block by STATE, REMOVABLE, NODE or ZONES +-attribute. This default behavior is possible to override by the +-\fB\-\-split\fR option (e.g. \fBlsmem \-\-split=STATE,ZONES\fR). The special +-word "none" may be used to ignore all differences between memory blocks and to +-create as large as possible continuous ranges. The opposite semantic is +-\fB\-\-all\fR to list individual memory blocks. The default split policy is +-subject to change. Always explicitly use \fB\-\-split\fR in environments where +-a stable output is required. ++block distinguish from the previous block by some output column. This default ++behavior is possible to override by the \fB\-\-split\fR option (e.g. \fBlsmem ++\-\-split=ZONES\fR). The special word "none" may be used to ignore all ++differences between memory blocks and to create as large as possible continuous ++ranges. The opposite semantic is \fB\-\-all\fR to list individual memory ++blocks. + + Note that some output columns may provide inaccurate information if a split policy + forces \fBlsmem\fP to ignore diffrences in some attributes. For example if you +diff --git a/sys-utils/lsmem.c b/sys-utils/lsmem.c +index 34a2847af..aaf7374fc 100644 +--- a/sys-utils/lsmem.c ++++ b/sys-utils/lsmem.c +@@ -202,6 +202,32 @@ static inline void reset_split_policy(struct lsmem *l, int enable) + l->split_by_zones = enable; + } + ++static void set_split_policy(struct lsmem *l, int cols[], size_t ncols) ++{ ++ size_t i; ++ ++ reset_split_policy(l, 0); ++ ++ for (i = 0; i < ncols; i++) { ++ switch (cols[i]) { ++ case COL_STATE: ++ l->split_by_state = 1; ++ break; ++ case COL_NODE: ++ l->split_by_node = 1; ++ break; ++ case COL_REMOVABLE: ++ l->split_by_removable = 1; ++ break; ++ case COL_ZONES: ++ l->split_by_zones = 1; ++ break; ++ default: ++ break; ++ } ++ } ++} ++ + static void add_scols_line(struct lsmem *lsmem, struct memory_block *blk) + { + size_t i; +@@ -638,32 +664,17 @@ int main(int argc, char **argv) + int split[ARRAY_SIZE(coldescs)] = { 0 }; + static size_t nsplits = 0; + +- reset_split_policy(lsmem, 0); /* disable all */ +- + if (strcasecmp(splitarg, "none") == 0) + ; + else if (string_add_to_idarray(splitarg, split, ARRAY_SIZE(split), + (int *) &nsplits, column_name_to_id) < 0) + return EXIT_FAILURE; + +- for (i = 0; i < nsplits; i++) { +- switch (split[i]) { +- case COL_STATE: +- lsmem->split_by_state = 1; +- break; +- case COL_NODE: +- lsmem->split_by_node = 1; +- break; +- case COL_REMOVABLE: +- lsmem->split_by_removable = 1; +- break; +- case COL_ZONES: +- lsmem->split_by_zones = 1; +- break; +- } +- } ++ set_split_policy(lsmem, split, nsplits); ++ + } else +- reset_split_policy(lsmem, 1); /* enable all */ ++ /* follow output columns */ ++ set_split_policy(lsmem, columns, ncolumns); + + /* + * Read data and print output +-- +2.13.6