summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2009-07-10 09:59:37 +0000
committerAlasdair Kergon <agk@redhat.com>2009-07-10 09:59:37 +0000
commita9cb6969b0f8e73d78e5e2d94e24ce55d549c517 (patch)
treefe9bb4d036429dd70e35449f68bd4b92f5d3386a
parentf1c90ec108efa6f113be4ee0da65331f6e15877a (diff)
downloadlvm2-a9cb6969b0f8e73d78e5e2d94e24ce55d549c517.tar.gz
lvm2-a9cb6969b0f8e73d78e5e2d94e24ce55d549c517.tar.xz
lvm2-a9cb6969b0f8e73d78e5e2d94e24ce55d549c517.zip
Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old
Change plog to use dm_log_with_errno unless deprecated dm_log_init was used. Rename plog macro to LOG_LINE and use in dm_dump_memory_debug.
-rw-r--r--WHATS_NEW_DM3
-rw-r--r--lib/log/log.h14
-rw-r--r--lib/log/lvm-logging.h2
-rw-r--r--libdm/.exported_symbols3
-rw-r--r--libdm/libdevmapper.h43
-rw-r--r--libdm/libdm-common.c52
-rw-r--r--libdm/misc/dm-logging.h9
-rw-r--r--libdm/mm/dbg_malloc.c6
-rw-r--r--po/pogen.h3
9 files changed, 102 insertions, 33 deletions
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index d6a03cfb..0b3c6202 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,8 @@
Version 1.02.34 -
================================
+ Rename plog macro to LOG_LINE and use in dm_dump_memory_debug.
+ Change plog to use dm_log_with_errno unless deprecated dm_log_init was used.
+ Add dm_log_with_errno and dm_log_with_errno_init, deprecating the old fns.
Fix whitespace in linear target line to fix identical table line detection.
Add device number to more log messages during activation.
diff --git a/lib/log/log.h b/lib/log/log.h
index 09a75ad7..110f1b0e 100644
--- a/lib/log/log.h
+++ b/lib/log/log.h
@@ -50,17 +50,17 @@
#define _LOG_ERR 3
#define _LOG_FATAL 2
-#define log_debug(x...) plog(_LOG_DEBUG, x)
-#define log_info(x...) plog(_LOG_INFO, x)
-#define log_notice(x...) plog(_LOG_NOTICE, x)
-#define log_warn(x...) plog(_LOG_WARN | _LOG_STDERR, x)
-#define log_err(x...) plog(_LOG_ERR, x)
-#define log_fatal(x...) plog(_LOG_FATAL, x)
+#define log_debug(x...) LOG_LINE(_LOG_DEBUG, x)
+#define log_info(x...) LOG_LINE(_LOG_INFO, x)
+#define log_notice(x...) LOG_LINE(_LOG_NOTICE, x)
+#define log_warn(x...) LOG_LINE(_LOG_WARN | _LOG_STDERR, x)
+#define log_err(x...) LOG_LINE(_LOG_ERR, x)
+#define log_fatal(x...) LOG_LINE(_LOG_FATAL, x)
#define stack log_debug("<backtrace>") /* Backtrace on error */
#define log_very_verbose(args...) log_info(args)
#define log_verbose(args...) log_notice(args)
-#define log_print(args...) plog(_LOG_WARN, args)
+#define log_print(args...) LOG_LINE(_LOG_WARN, args)
#define log_error(args...) log_err(args)
/* System call equivalents */
diff --git a/lib/log/lvm-logging.h b/lib/log/lvm-logging.h
index 70693eaf..d267e233 100644
--- a/lib/log/lvm-logging.h
+++ b/lib/log/lvm-logging.h
@@ -19,7 +19,7 @@
void print_log(int level, const char *file, int line, const char *format, ...)
__attribute__ ((format(printf, 4, 5)));
-#define plog(l, x...) print_log(l, __FILE__, __LINE__ , ## x)
+#define LOG_LINE(l, x...) print_log(l, __FILE__, __LINE__ , ## x)
#include "log.h"
diff --git a/libdm/.exported_symbols b/libdm/.exported_symbols
index f5d3852c..bea4a55b 100644
--- a/libdm/.exported_symbols
+++ b/libdm/.exported_symbols
@@ -6,6 +6,9 @@ dm_fclose
dm_get_library_version
dm_log
dm_log_init
+dm_log_is_non_default
+dm_log_with_errno
+dm_log_with_errno_init
dm_log_init_verbose
dm_task_create
dm_task_destroy
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index 3cecf4c1..69faa80e 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -30,30 +30,40 @@
#include <stdio.h>
/*****************************************************************
- * The first section of this file provides direct access to the
- * individual device-mapper ioctls.
+ * The first section of this file provides direct access to the
+ * individual device-mapper ioctls. Since it is quite laborious to
+ * build the ioctl arguments for the device-mapper, people are
+ * encouraged to use this library.
****************************************************************/
/*
- * Since it is quite laborious to build the ioctl
- * arguments for the device-mapper people are
- * encouraged to use this library.
- *
- * You will need to build a struct dm_task for
- * each ioctl command you want to execute.
+ * The library user may wish to register their own
+ * logging function. By default errors go to stderr.
+ * Use dm_log_with_errno_init(NULL) to restore the default log fn.
*/
+typedef void (*dm_log_with_errno_fn) (int level, const char *file, int line,
+ int dm_errno, const char *f, ...)
+ __attribute__ ((format(printf, 5, 6)));
+
+void dm_log_with_errno_init(dm_log_with_errno_fn fn);
+void dm_log_init_verbose(int level);
+
+/*
+ * Original version of this function.
+ * dm_errno is set to 0.
+ *
+ * Deprecated: Use the _with_errno_ versions above instead.
+ */
typedef void (*dm_log_fn) (int level, const char *file, int line,
const char *f, ...)
__attribute__ ((format(printf, 4, 5)));
-
+void dm_log_init(dm_log_fn fn);
/*
- * The library user may wish to register their own
- * logging function, by default errors go to stderr.
- * Use dm_log_init(NULL) to restore the default log fn.
+ * For backward-compatibility, indicate that dm_log_init() was used
+ * to set a non-default value of dm_log().
*/
-void dm_log_init(dm_log_fn fn);
-void dm_log_init_verbose(int level);
+int dm_log_is_non_default(void);
enum {
DM_DEVICE_CREATE,
@@ -87,6 +97,11 @@ enum {
DM_DEVICE_SET_GEOMETRY
};
+/*
+ * You will need to build a struct dm_task for
+ * each ioctl command you want to execute.
+ */
+
struct dm_task;
struct dm_task *dm_task_create(int type);
diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
index 92469233..c44b794c 100644
--- a/libdm/libdm-common.c
+++ b/libdm/libdm-common.c
@@ -42,10 +42,12 @@ static int _verbose = 0;
* Library users can provide their own logging
* function.
*/
-static void _default_log(int level, const char *file __attribute((unused)),
- int line __attribute((unused)), const char *f, ...)
+
+static void _default_log_line(int level,
+ const char *file __attribute((unused)),
+ int line __attribute((unused)), int dm_errno,
+ const char *f, va_list ap)
{
- va_list ap;
int use_stderr = level & _LOG_STDERR;
level &= ~_LOG_STDERR;
@@ -53,22 +55,41 @@ static void _default_log(int level, const char *file __attribute((unused)),
if (level > _LOG_WARN && !_verbose)
return;
- va_start(ap, f);
-
if (level < _LOG_WARN)
vfprintf(stderr, f, ap);
else
vfprintf(use_stderr ? stderr : stdout, f, ap);
- va_end(ap);
-
if (level < _LOG_WARN)
fprintf(stderr, "\n");
else
fprintf(use_stderr ? stderr : stdout, "\n");
}
+static void _default_log_with_errno(int level,
+ const char *file __attribute((unused)),
+ int line __attribute((unused)), int dm_errno,
+ const char *f, ...)
+{
+ va_list ap;
+
+ va_start(ap, f);
+ _default_log_line(level, file, line, dm_errno, f, ap);
+ va_end(ap);
+}
+
+static void _default_log(int level, const char *file,
+ int line, const char *f, ...)
+{
+ va_list ap;
+
+ va_start(ap, f);
+ _default_log_line(level, file, line, 0, f, ap);
+ va_end(ap);
+}
+
dm_log_fn dm_log = _default_log;
+dm_log_with_errno_fn dm_log_with_errno = _default_log_with_errno;
void dm_log_init(dm_log_fn fn)
{
@@ -76,6 +97,23 @@ void dm_log_init(dm_log_fn fn)
dm_log = fn;
else
dm_log = _default_log;
+
+ dm_log_with_errno = _default_log_with_errno;
+}
+
+int dm_log_is_non_default(void)
+{
+ return (dm_log == _default_log) ? 0 : 1;
+}
+
+void dm_log_with_errno_init(dm_log_with_errno_fn fn)
+{
+ if (fn)
+ dm_log_with_errno = fn;
+ else
+ dm_log_with_errno = _default_log_with_errno;
+
+ dm_log = _default_log;
}
void dm_log_init_verbose(int level)
diff --git a/libdm/misc/dm-logging.h b/libdm/misc/dm-logging.h
index b25bc55b..d2f23591 100644
--- a/libdm/misc/dm-logging.h
+++ b/libdm/misc/dm-logging.h
@@ -19,8 +19,15 @@
#include "libdevmapper.h"
extern dm_log_fn dm_log;
+extern dm_log_with_errno_fn dm_log_with_errno;
-#define plog(l, x...) dm_log(l, __FILE__, __LINE__, ## x)
+#define LOG_LINE(l, x...) \
+ do { \
+ if (dm_log_is_non_default()) \
+ dm_log(l, __FILE__, __LINE__, ## x); \
+ else \
+ dm_log_with_errno(l, __FILE__, __LINE__, 0, ## x); \
+ } while (0)
#include "log.h"
diff --git a/libdm/mm/dbg_malloc.c b/libdm/mm/dbg_malloc.c
index ef53fc51..24ddc37c 100644
--- a/libdm/mm/dbg_malloc.c
+++ b/libdm/mm/dbg_malloc.c
@@ -205,9 +205,9 @@ int dm_dump_memory_debug(void)
}
str[sizeof(str) - 1] = '\0';
- dm_log(_LOG_INFO, mb->file, mb->line,
- "block %d at %p, size %" PRIsize_t "\t [%s]",
- mb->id, mb->magic, mb->length, str);
+ LOG_LINE(_LOG_INFO, mb->file, mb->line,
+ "block %d at %p, size %" PRIsize_t "\t [%s]",
+ mb->id, mb->magic, mb->length, str);
tot += mb->length;
}
diff --git a/po/pogen.h b/po/pogen.h
index 2be92ba7..6ab81545 100644
--- a/po/pogen.h
+++ b/po/pogen.h
@@ -21,3 +21,6 @@
#define print_log(level, file, line, format, args...) print_log(format, args)
#define dm_log(level, file, line, format, args...) dm_log(format, args)
+#define dm_log_with_errno(level, file, line, format, dm_errno, args...) \
+ dm_log(format, args)
+