[PATCH v3 04/11] nilfs-utils: fsck: add libnilfsmessages.la library into nilfs-utils package

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

This patch adds libnilfsmessages.la library into nilfs-utils package. The library generalizes messages output.

With the best regards,
Vyacheslav Dubeyko.
--
From: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
Subject: [PATCH v3 04/11] nilfs-utils: fsck: add libnilfsmessages.la library into nilfs-utils package

This patch adds libnilfsmessages.la library into nilfs-utils package. The library generalizes messages output.

Signed-off-by: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
---
 include/nilfs_messages.def |  132 +++++++++++++++++
 include/nilfs_messages.h   |  126 ++++++++++++++++
 lib/nilfs_messages.c       |  346 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 604 insertions(+), 0 deletions(-)
 create mode 100644 include/nilfs_messages.def
 create mode 100644 include/nilfs_messages.h
 create mode 100644 lib/nilfs_messages.c

diff --git a/include/nilfs_messages.def b/include/nilfs_messages.def
new file mode 100644
index 0000000..afe4e17
--- /dev/null
+++ b/include/nilfs_messages.def
@@ -0,0 +1,132 @@
+/*
+ * nilfs_messages.def - List of codes and associated messages
+ *
+ * Copyright (C) 2012 Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
+ *
+ * This file is part of NILFS.
+ *
+ * NILFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * NILFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NILFS; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Written by Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
+ */
+
+#ifndef NILFS_UNKNOWN
+#define NILFS_UNKNOWN		0x0
+#endif
+#ifndef NILFS_INFO
+#define NILFS_INFO		0x1
+#endif
+#ifndef NILFS_WARNING
+#define NILFS_WARNING		0x2
+#endif
+#ifndef NILFS_LOOKS_LIKE_ERROR
+#define NILFS_LOOKS_LIKE_ERROR	0x4
+#endif
+#ifndef NILFS_MINOR_ERROR
+#define NILFS_MINOR_ERROR	0x8
+#endif
+#ifndef NILFS_CRITICAL_ERROR
+#define NILFS_CRITICAL_ERROR	0x10
+#endif
+#ifndef NILFS_FATAL_ERROR
+#define NILFS_FATAL_ERROR	0x20
+#endif
+
+#ifndef NILFS_MESSAGE
+#define NILFS_MESSAGE(ID, SEVERITY, MESSAGE)
+#endif
+
+NILFS_MESSAGE(NILFS_OK, NILFS_UNKNOWN, "")
+NILFS_MESSAGE(UNKNOWN_ERROR, NILFS_FATAL_ERROR, "Unknown error has occured.")
+NILFS_MESSAGE(NOT_IMPLEMENTED, NILFS_WARNING, "Sorry. Functionality is not implemented yet.")
+NILFS_MESSAGE(SUCCESS_FAREWELL, NILFS_INFO, "All is OK. Have a nice day.")
+NILFS_MESSAGE(NO_DEVICE, NILFS_FATAL_ERROR, "Device not specified.")
+NILFS_MESSAGE(BAD_DEVICE, NILFS_FATAL_ERROR, "Cannot open device.")
+NILFS_MESSAGE(NOT_MOUNTED, NILFS_INFO, "Device is not mounted.")
+NILFS_MESSAGE(RO_MOUNT, NILFS_WARNING, "Device is mounted in RO mode.")
+NILFS_MESSAGE(RW_MOUNT, NILFS_WARNING, "Device is mounted in RW mode.")
+NILFS_MESSAGE(DEVICE_NOT_OPENED, NILFS_LOOKS_LIKE_ERROR, "Device is not opened.")
+NILFS_MESSAGE(DEVICE_OPENED_YET, NILFS_LOOKS_LIKE_ERROR, "Device is opened yet.")
+NILFS_MESSAGE(INVALID_MODE, NILFS_MINOR_ERROR, "Requested mode is unavailable.")
+NILFS_MESSAGE(FLUSH_FAILED, NILFS_CRITICAL_ERROR, "Flush is failed.")
+NILFS_MESSAGE(CANNOT_CLOSE_DEVICE, NILFS_LOOKS_LIKE_ERROR, "Cannot close device.")
+NILFS_MESSAGE(INVALID_BLOCK_SIZE, NILFS_CRITICAL_ERROR, "Invalid block size.")
+NILFS_MESSAGE(DATA_PROCCESSED_PARTIALLY, NILFS_LOOKS_LIKE_ERROR, "The requested data are proccessed partially.")
+NILFS_MESSAGE(OP_FAILED, NILFS_FATAL_ERROR, "Requested operation has failed.")
+NILFS_MESSAGE(INVALID_PARAMETER, NILFS_MINOR_ERROR, "Input parameters are invalid.")
+NILFS_MESSAGE(OUT_OF_VOLUME, NILFS_CRITICAL_ERROR, "Trying to operate out of volume.")
+NILFS_MESSAGE(CANNOT_SET_DEV_POS, NILFS_CRITICAL_ERROR, "Cannot set current position on device.")
+NILFS_MESSAGE(CANNOT_ALLOCATE, NILFS_FATAL_ERROR, "Cannot allocate memory.")
+NILFS_MESSAGE(CANNOT_FREE, NILFS_LOOKS_LIKE_ERROR, "Cannot free memory.")
+NILFS_MESSAGE(CANNOT_READ_SUPERBLOCK, NILFS_FATAL_ERROR, "Cannot read superblock from disk.")
+NILFS_MESSAGE(INVALID_SB_OFFSET, NILFS_CRITICAL_ERROR, "Invalid value of superblock offset.")
+NILFS_MESSAGE(CANNOT_GET_SUPERBLOCKS, NILFS_FATAL_ERROR, "Cannot get superblocks from requested device.")
+NILFS_MESSAGE(INVALID_NILFS_SIGNATURE, NILFS_WARNING, "Superblock signature is invalid. This is *not* NILFS superblock")
+NILFS_MESSAGE(NILFS_NOT_FOUND, NILFS_WARNING, "NILFS superblocks are not detected.")
+NILFS_MESSAGE(ONLY_SB1_OK_FOUND, NILFS_CRITICAL_ERROR, "Primary valid superblock was found but secondary *not*.")
+NILFS_MESSAGE(ONLY_SB1_CORRUPTED_FOUND, NILFS_CRITICAL_ERROR, "Corrupted primary superblock was found but secondary *not*.")
+NILFS_MESSAGE(ONLY_SB2_OK_FOUND, NILFS_CRITICAL_ERROR, "Secondary valid superblock was found but primary *not*..")
+NILFS_MESSAGE(ONLY_SB2_CORRUPTED_FOUND, NILFS_CRITICAL_ERROR, "Corrupted secondary superblock was found but primary *not*.")
+NILFS_MESSAGE(SB1_SB2_CORRUPTED, NILFS_CRITICAL_ERROR, "Primary and secondary superblocks were found but in corrupted state.")
+NILFS_MESSAGE(SB1_OK_SB2_CORRUPTED, NILFS_CRITICAL_ERROR, "Primary superblock is valid but secondary is in corrupted state.")
+NILFS_MESSAGE(SB1_CORRUPTED_SB2_OK, NILFS_CRITICAL_ERROR, "Secondary superblock is valid but primary is in corrupted state.")
+NILFS_MESSAGE(CANNOT_DETECT_SB_STATE, NILFS_FATAL_ERROR, "Cannot detect state of a superblock because of internal error.")
+NILFS_MESSAGE(SB1_OK_SB2_OK, NILFS_INFO, "NILFS has valid primary and secondary superblocks.")
+NILFS_MESSAGE(CANNOT_CHECK_SB, NILFS_FATAL_ERROR, "Cannot check superblock validity because of internal error.")
+NILFS_MESSAGE(INVALID_SB, NILFS_CRITICAL_ERROR, "Superblock is in corrupted state.")
+NILFS_MESSAGE(INVALID_SB_SIZE, NILFS_CRITICAL_ERROR, "Superblock contains incorrect size in bytes.")
+NILFS_MESSAGE(UNSUPPORTED_SB_REV, NILFS_WARNING, "It is detected an unsupported revision of NILFS superblock.")
+NILFS_MESSAGE(INVALID_CRC, NILFS_CRITICAL_ERROR, "Invalid checksum was detected.")
+NILFS_MESSAGE(OUTSIZED_DEV_SIZE, NILFS_CRITICAL_ERROR, "Superblock keeps value that greater of partition size.")
+NILFS_MESSAGE(UNDERSIZED_DEV_SIZE, NILFS_LOOKS_LIKE_ERROR, "Superblock keeps value that lesser of partition size.")
+NILFS_MESSAGE(INVALID_SB_DEV_SIZE, NILFS_CRITICAL_ERROR, "Superblock keeps invalid value of partition size.")
+NILFS_MESSAGE(INVALID_SB_FEATURE, NILFS_MINOR_ERROR, "Superblock keeps invalid set of feature flags.")
+NILFS_MESSAGE(UNSUPPORTED_SB_RO_FEATURE, NILFS_MINOR_ERROR, "Superblock keeps unsupported RO feature flags. It should work in RO mode.")
+NILFS_MESSAGE(INVALID_SB_FLAGS, NILFS_MINOR_ERROR, "Superblock keeps invalid set of fs independent flags.")
+NILFS_MESSAGE(INVALID_SB_BLOCKS_PER_SEG, NILFS_CRITICAL_ERROR, "Superblock keeps invalid value of blocks per full segment.")
+NILFS_MESSAGE(INVALID_SB_NSEGMENTS, NILFS_CRITICAL_ERROR, "Superblock keeps invalid number of segments in filesystem.")
+NILFS_MESSAGE(INVALID_SB_FIRST_DATA_BLOCK, NILFS_CRITICAL_ERROR, "Superblock keeps invalid value of first data block.")
+NILFS_MESSAGE(INVALID_SB_R_SEGS_PERCENTAGE, NILFS_CRITICAL_ERROR, "Superblock keeps invalid number of reserved segments percentage.")
+NILFS_MESSAGE(INVALID_SB_LAST_CNO, NILFS_CRITICAL_ERROR, "Superblock keeps invalid last checkpoint number.")
+NILFS_MESSAGE(INVALID_SB_LAST_PSEG, NILFS_CRITICAL_ERROR, "Superblock keeps invalid disk block address of partial segment.")
+NILFS_MESSAGE(INVALID_SB_LAST_SEQ, NILFS_CRITICAL_ERROR, "Superblock keeps invalid sequential number of partial segment.")
+NILFS_MESSAGE(INVALID_SB_FREE_BLKS, NILFS_CRITICAL_ERROR, "Superblock keeps invalid free blocks count.")
+NILFS_MESSAGE(INVALID_SB_TIMES, NILFS_LOOKS_LIKE_ERROR, "Superblock keeps invalid timestamps.")
+NILFS_MESSAGE(MAX_POSSIBLE_MNT_COUNT, NILFS_WARNING, "Maximum possible mount count has been reached. It should check filesystem.")
+NILFS_MESSAGE(INVALID_SB_FS_STATE, NILFS_CRITICAL_ERROR, "Superblock keeps invalid file system state flags.")
+NILFS_MESSAGE(INVALID_SB_FS_ERRORS, NILFS_LOOKS_LIKE_ERROR, "Superblock keeps strange definition of behavior in the case of error detection.")
+NILFS_MESSAGE(INVALID_SB_LAST_CHECK, NILFS_LOOKS_LIKE_ERROR, "Superblock keeps invalid timestamp of last check.")
+NILFS_MESSAGE(INVALID_SB_OS, NILFS_MINOR_ERROR, "Superblock keeps invalid code of creator OS.")
+NILFS_MESSAGE(INVALID_SB_DEF_ID, NILFS_MINOR_ERROR, "Superblock keeps invalid default ID for user and group.")
+NILFS_MESSAGE(INVALID_SB_FIRST_INO, NILFS_CRITICAL_ERROR, "Superblock keeps invalid first user's file inode number.")
+NILFS_MESSAGE(INVALID_SB_INO_SZ, NILFS_CRITICAL_ERROR, "Superblock keeps invalid size of on-disk inode.")
+NILFS_MESSAGE(INVALID_SB_DAT_ENTRY_SZ, NILFS_CRITICAL_ERROR, "Superblock keeps invalid DAT entry size.")
+NILFS_MESSAGE(INVALID_SB_CHECKPOINT_SZ, NILFS_CRITICAL_ERROR, "Superblock keeps invalid size of a checkpoint.")
+NILFS_MESSAGE(INVALID_SB_SEG_USAGE_SZ, NILFS_CRITICAL_ERROR, "Superblock keeps invalid size of a segment usage.")
+NILFS_MESSAGE(INVALID_SB_C_INTERVAL, NILFS_MINOR_ERROR, "Superblock keeps invalid value of commit interval of segment.")
+NILFS_MESSAGE(INVALID_SB_C_BLK_MAX, NILFS_MINOR_ERROR, "Superblock keeps invalid value of threshold of data amount for the segment construction.")
+NILFS_MESSAGE(NOT_CLEAN_UMOUNT_DETECTED, NILFS_WARNING, "NILFS had been umounted not cleanly. It should be checked.")
+NILFS_MESSAGE(FS_ERRORS_DETECTED_BY_DRIVER, NILFS_WARNING, "NILFS volumes has errors detected by drivers. It should be recovered.")
+
+
+NILFS_MESSAGE(REQUESTED_DEV, NILFS_UNKNOWN, "Requested device:")
+NILFS_MESSAGE(DONT_WORK_RO_MOUNT, NILFS_INFO, "FSCK *doesn't* work with RO mounted partition currently.")
+NILFS_MESSAGE(DONT_WORK_RW_MOUNT, NILFS_INFO, "FSCK *doesn't* work with RW mounted partition.")
+NILFS_MESSAGE(NOT_NILFS_VOLUME, NILFS_WARNING, "!!!This is not NILFS volume or NILFS volume completely *UNRECOVERABLE*!!!")
+NILFS_MESSAGE(NILFS_HAS_CORRUPTED_SB, NILFS_CRITICAL_ERROR, "Device contains NILFS volume with *CORRUPTED* superblocks.")
+NILFS_MESSAGE(FSCK_DOES_NOTHING, NILFS_INFO, "FSCK currently does nothing.")
+NILFS_MESSAGE(RO_CHECK_DOES_NOT_WORK, NILFS_WARNING, "Read-only check doesn't supported yet.")
+
+#undef NILFS_MESSAGE
diff --git a/include/nilfs_messages.h b/include/nilfs_messages.h
new file mode 100644
index 0000000..999d235
--- /dev/null
+++ b/include/nilfs_messages.h
@@ -0,0 +1,126 @@
+/*
+ * nilfs_messages.h - Declaration of error, warning, info codes,
+ *                    associated messages and routines
+ *
+ * Copyright (C) 2012 Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
+ *
+ * This file is part of NILFS.
+ *
+ * NILFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * NILFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NILFS; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Written by Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
+ */
+
+#ifndef NILFS_MESSAGES_H
+#define NILFS_MESSAGES_H
+
+/* Available verbosity levels. */
+enum nilfs_verbosity_level {
+	KEEP_SILENCE,
+	BE_VERBOSE,
+	DEBUG_SPAM
+}; /* enum nilfs_verbosity_level */
+
+/* NILFS error, warning, info codes and associated messages. */
+enum nilfs_message_codes {
+
+#define NILFS_MESSAGE(ID, SEVERITY, MESSAGE) ID,
+#include "nilfs_messages.def"
+
+	MAX_MESSAGE_CODE
+}; /* enum nilfs_message_codes */
+
+/* Possible severity of errors */
+#define NILFS_UNKNOWN		0x0
+#define NILFS_INFO		0x1
+#define NILFS_WARNING		0x2
+#define NILFS_LOOKS_LIKE_ERROR	0x4
+#define NILFS_MINOR_ERROR	0x8
+#define NILFS_CRITICAL_ERROR	0x10
+#define NILFS_FATAL_ERROR	0x20
+
+/* NILFS message array */
+extern const char *nilfs_message[MAX_MESSAGE_CODE];
+
+/* NILFS severity errors table */
+extern const int error_severity[MAX_MESSAGE_CODE];
+
+/* Set verbosity level */
+void set_verbosity_level(int requested_level);
+
+/*****************************************************************************
+ * User Interface (UI) messages
+ */
+
+/* Inform user about something */
+void ui_info(const char *fmt, ...);
+
+/* Warn user about some important but not critical situation */
+void ui_warning(const char *fmt, ...);
+
+/* Report error in way of using the utility */
+void ui_error(const char *fmt, ...);
+
+/*****************************************************************************
+ * Messages inform about file system state
+ */
+
+/* Inform user about file system state */
+void fs_info(const char *fmt, ...);
+
+/* Warn user about some important thing in file system state */
+void fs_warning(const char *fmt, ...);
+
+/* Report about detected unrecoverable file system's error */
+void fs_fatal_error(const char *fmt, ...);
+
+/* Report about detected critical file system's error */
+void fs_critical_error(const char *fmt, ...);
+
+/* Report about detected minor file system's error */
+void fs_minor_error(const char *fmt, ...);
+
+/* Report about detected suspicious state looks like error */
+void fs_looks_like_error(const char *fmt, ...);
+
+/*****************************************************************************
+ * Internal messages
+ */
+
+/* Inform user about common internal actions */
+void internal_info(const char *fmt, ...);
+
+/* Warn user about some important situation */
+void internal_warning(const char *fmt, ...);
+
+/* Report about internal errors */
+void internal_error(const char *fmt, ...);
+
+/* Report about internal errors + print system error message */
+void internal_perror(const char *fmt, ...);
+
+/* Debug message */
+void internal_debug(const char *fmt, ...);
+
+/*****************************************************************************
+ * Helpers
+ */
+
+/* Print all FS detected errors */
+void print_fs_detected_errors(const void *errors_bitmap,
+				const int *err_id,
+				__u16 max_bit_num);
+
+#endif /* NILFS_MESSAGES_H */
diff --git a/lib/nilfs_messages.c b/lib/nilfs_messages.c
new file mode 100644
index 0000000..e6c2da7
--- /dev/null
+++ b/lib/nilfs_messages.c
@@ -0,0 +1,346 @@
+/*
+ * nilfs_messages.c - Print routines (libnilfsmessages)
+ *
+ * Copyright (C) 2012 Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
+ *
+ * This file is part of NILFS.
+ *
+ * NILFS is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * NILFS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NILFS; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Written by Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "nilfs.h"
+#include "nilfs_messages.h"
+#include "fsck_nilfs2.h"
+
+/*****************************************************************************
+ * GLOBAL VARIABLES
+ *****************************************************************************/
+
+/* NILFS message array */
+const char *nilfs_message[MAX_MESSAGE_CODE] = {
+
+#define NILFS_MESSAGE(ID, SEVERITY, MESSAGE) MESSAGE,
+#include "nilfs_messages.def"
+
+}; /* const char *nilfs_message[MAX_MESSAGE_CODE] */
+
+/* NILFS severity errors table */
+const int error_severity[MAX_MESSAGE_CODE] = {
+
+#define NILFS_MESSAGE(ID, SEVERITY, MESSAGE) SEVERITY,
+#include "nilfs_messages.def"
+
+}; /* const int error_severity[MAX_MESSAGE_CODE] */
+
+/* Verbosity level of fsck */
+int verbosity_level = BE_VERBOSE;
+
+/*****************************************************************************
+ * IMPLEMENTATION SECTION
+ *****************************************************************************/
+
+/*****************************************************************************
+ * NAME: set_verbosity_level
+ *
+ * FUNCTION: Set verbosity level
+ *
+ * PARAMETERS:
+ * @requested_level: Requested level of verbosity.
+ */
+void set_verbosity_level(int requested_level)
+{
+	if (requested_level < KEEP_SILENCE ||
+			requested_level > DEBUG_SPAM) {
+		fprintf(stderr, "[NILFS_ERROR]: unknow verbosity level.");
+		fprintf(stderr, "Keep the same verbosity level.\n");
+		return;
+	}
+
+	verbosity_level = requested_level;
+} /* set_verbosity_level */
+
+/*****************************************************************************
+ * NAME: NILFS_PRINT_MESSAGE
+ *
+ * MACRO: Print message into stdout/stderr
+ *
+ * PARAMETERS:
+ * @granted_verbosity: Verbosity level gives right to print.
+ * @out_stream: Type of the standard output stream [stdout | stderr].
+ * @prefix: Prefix word begins a message.
+ * @fmt: Format of the message.
+ */
+#define NILFS_PRINT_MESSAGE(granted_verbosity, out_stream, prefix, fmt) \
+	do { \
+		va_list args_list; \
+		if (verbosity_level < granted_verbosity) \
+			return; \
+		va_start(args_list, fmt); \
+		fprintf(out_stream, prefix); \
+		vfprintf(out_stream, fmt, args_list); \
+		fprintf(out_stream, "\n"); \
+		va_end(args_list); \
+	} while (0)
+/* NILFS_PRINT_MESSAGE */
+
+/*****************************************************************************
+ * NAME: ui_info
+ *
+ * FUNCTION: Inform user about something
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void ui_info(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stdout, "[UI_INFO]: ", fmt);
+} /* ui_info() */
+
+/*****************************************************************************
+ * NAME: ui_warning
+ *
+ * FUNCTION: Warn user about some important but not critical situation
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void ui_warning(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stdout, "[UI_WARNING]: ", fmt);
+} /* ui_warning() */
+
+/*****************************************************************************
+ * NAME: ui_error
+ *
+ * FUNCTION: Report error in way of using the utility
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void ui_error(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stdout, "[UI_ERROR]: ", fmt);
+} /* ui_error() */
+
+/*****************************************************************************
+ * NAME: fs_info
+ *
+ * FUNCTION: Inform user about file system state
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void fs_info(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stdout, "[FS_INFO]: ", fmt);
+} /* fs_info() */
+
+/*****************************************************************************
+ * NAME: fs_warning
+ *
+ * FUNCTION: Warn user about some important thing in file system state
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void fs_warning(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[FS_WARNING]: ", fmt);
+} /* fs_warning() */
+
+/*****************************************************************************
+ * NAME: fs_fatal_error
+ *
+ * FUNCTION: Report about detected unrecoverable error in file system's metadata
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void fs_fatal_error(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[FS_FATAL_ERROR]: ", fmt);
+} /* fs_fatal_error() */
+
+/*****************************************************************************
+ * NAME: fs_critical_error
+ *
+ * FUNCTION: Report about detected critical file system's metadata error
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void fs_critical_error(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[FS_CRITICAL_ERROR]: ", fmt);
+} /* fs_critical_error() */
+
+/*****************************************************************************
+ * NAME: fs_minor_error
+ *
+ * FUNCTION: Report about detected minor file system's metadata error
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void fs_minor_error(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[FS_MINOR_ERROR]: ", fmt);
+} /* fs_minor_error() */
+
+/*****************************************************************************
+ * NAME: fs_looks_like_error
+ *
+ * FUNCTION: Report about detected suspicious metadata's state looks like error
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void fs_looks_like_error(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[FS_LOOKS_LIKE_ERROR]: ", fmt);
+} /* fs_looks_like_error() */
+
+/*****************************************************************************
+ * NAME: internal_info
+ *
+ * FUNCTION: Inform user about common actions
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void internal_info(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stdout, "[INTERNAL_INFO]: ", fmt);
+} /* internal_info() */
+
+/*****************************************************************************
+ * NAME: internal_warning
+ *
+ * FUNCTION: Warn user about some important situation
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void internal_warning(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[INTERNAL_WARNING]: ", fmt);
+} /* internal_warning() */
+
+/*****************************************************************************
+ * NAME: internal_error
+ *
+ * FUNCTION: Report about internal errors
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void internal_error(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[INTERNAL_ERROR]: ", fmt);
+} /* internal_error() */
+
+/*****************************************************************************
+ * NAME: internal_perror
+ *
+ * FUNCTION: Report about internal errors + print system error message
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void internal_perror(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(BE_VERBOSE, stderr, "[INTERNAL_ERROR]: ", fmt);
+	perror("[SYSTEM_ERROR]");
+} /* internal_perror() */
+
+/*****************************************************************************
+ * NAME: internal_debug
+ *
+ * FUNCTION: Debug messages
+ *
+ * PARAMETERS:
+ * @fmt: Format of the message.
+ */
+void internal_debug(const char *fmt, ...)
+{
+	NILFS_PRINT_MESSAGE(DEBUG_SPAM, stdout, "[INTERNAL_DEBUG]: ", fmt);
+} /* internal_debug() */
+
+/*****************************************************************************
+ * NAME:  print_fs_detected_errors
+ *
+ * FUNCTION:  Print all detected FS errors.
+ *
+ * PARAMETERS:
+ * @errors_bitmap: Pointer on bitmap with detected errors' flags.
+ * @err_id: Pointer on array of error codes associated with errors' flags.
+ * @max_bit_num: Maximum count of flags in error bitmap and array of errors.
+ */
+void print_fs_detected_errors(const void *errors_bitmap,
+				const int *err_id,
+				__u16 max_bit_num)
+{
+	int err, index;
+	const __u8 *err_bitmap_ptr = (const __u8 *)errors_bitmap;
+
+	if (!errors_bitmap || !err_id) {
+		internal_debug("<%s>: %s",
+			__func__, nilfs_message[INVALID_PARAMETER]);
+		return;
+	}
+
+	for (index = 0; index < max_bit_num; index++) {
+		if (err_bitmap_ptr[index / 8] & (1 << (index % 8))) {
+			err = err_id[index];
+
+			if (err < NILFS_OK || err >= MAX_MESSAGE_CODE) {
+				internal_debug("<%s>: error code %d.",
+							__func__, err);
+				return;
+			}
+
+			switch (error_severity[err]) {
+			case NILFS_INFO:
+				fs_info("%s", nilfs_message[err]);
+				break;
+			case NILFS_WARNING:
+				fs_warning("%s", nilfs_message[err]);
+				break;
+			case NILFS_FATAL_ERROR:
+				fs_fatal_error("%s", nilfs_message[err]);
+				break;
+			case NILFS_CRITICAL_ERROR:
+				fs_critical_error("%s", nilfs_message[err]);
+				break;
+			case NILFS_MINOR_ERROR:
+				fs_minor_error("%s", nilfs_message[err]);
+				break;
+			case NILFS_LOOKS_LIKE_ERROR:
+				fs_looks_like_error("%s", nilfs_message[err]);
+				break;
+			default:
+				/* Keep silence */
+				break;
+			}
+		}
+	}
+
+	return;
+} /* print_fs_detected_errors() */
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux BTRFS]     [Linux CIFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux