diff --git a/WHATS_NEW b/WHATS_NEW index fac295336..90dd417b1 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.03.17 - =============================== + Fix lvm shell's lastlog command to report previous pre-command failures. Extend VDO and VDOPOOL without flushing and locking fs. Add --valuesonly option to lvmconfig to print only values without keys. Updates configure with recent autoconf tooling. diff --git a/lib/log/log.c b/lib/log/log.c index 5771a1d01..118a3ba42 100644 --- a/lib/log/log.c +++ b/lib/log/log.c @@ -446,6 +446,7 @@ const char *log_get_report_context_name(log_report_context_t context) const char *log_get_report_object_type_name(log_report_object_type_t object_type) { static const char *log_object_type_names[LOG_REPORT_OBJECT_TYPE_COUNT] = {[LOG_REPORT_OBJECT_TYPE_NULL] = "", + [LOG_REPORT_OBJECT_TYPE_PRE_CMD] = "pre-cmd", [LOG_REPORT_OBJECT_TYPE_CMD] = "cmd", [LOG_REPORT_OBJECT_TYPE_ORPHAN] = "orphan", [LOG_REPORT_OBJECT_TYPE_PV] = "pv", diff --git a/lib/log/lvm-logging.h b/lib/log/lvm-logging.h index 5b975a6b8..f5a4277a8 100644 --- a/lib/log/lvm-logging.h +++ b/lib/log/lvm-logging.h @@ -91,6 +91,7 @@ typedef enum { typedef enum { LOG_REPORT_OBJECT_TYPE_NULL, + LOG_REPORT_OBJECT_TYPE_PRE_CMD, LOG_REPORT_OBJECT_TYPE_CMD, LOG_REPORT_OBJECT_TYPE_ORPHAN, LOG_REPORT_OBJECT_TYPE_PV, diff --git a/tools/lvm.c b/tools/lvm.c index 756328f3f..370dc49e3 100644 --- a/tools/lvm.c +++ b/tools/lvm.c @@ -231,7 +231,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) orig_command_log_selection = dm_pool_strdup(cmd->libmem, find_config_tree_str(cmd, log_command_log_selection_CFG, NULL)); log_set_report_context(LOG_REPORT_CONTEXT_SHELL); - log_set_report_object_type(LOG_REPORT_OBJECT_TYPE_CMD); + log_set_report_object_type(LOG_REPORT_OBJECT_TYPE_PRE_CMD); while (1) { /* @@ -255,6 +255,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) log_error("Failed to reset log report selection."); } + log_set_report_object_type(LOG_REPORT_OBJECT_TYPE_PRE_CMD); log_set_report(cmd->cmd_report.log_rh); log_set_report_object_name_and_id(NULL, NULL); @@ -275,6 +276,8 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) continue; } + log_set_report_object_name_and_id(input, NULL); + add_history(input); for (i = 0; i < MAX_ARGS; i++) @@ -285,8 +288,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) if (lvm_split(input, &argc, argv, MAX_ARGS) == MAX_ARGS) { _discard_log_report_content(cmd); log_error("Too many arguments, sorry."); - dm_report_group_output_and_pop_all(cmd->cmd_report.report_group); - continue; + goto report_log; } if (!argc) { @@ -304,6 +306,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) continue; } + log_set_report_object_type(LOG_REPORT_OBJECT_TYPE_CMD); log_set_report_object_name_and_id(argv[0], NULL); is_lastlog_cmd = !strcmp(argv[0], "lastlog"); @@ -331,7 +334,7 @@ int lvm_shell(struct cmd_context *cmd, struct cmdline_context *cmdline) if (!is_lastlog_cmd) _log_shell_command_status(cmd, ret); - +report_log: log_set_report(NULL); dm_report_group_output_and_pop_all(cmd->cmd_report.report_group);