Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/fs/ocfs2/cluster/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  masklog.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Copyright (C) 2004, 2005 Oracle.  All rights reserved.
 */


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/string.h>
#include <linux/uaccess.h>

#include "masklog.h"

struct mlog_bits mlog_and_bits = MLOG_BITS_RHS(MLOG_INITIAL_AND_MASK);
EXPORT_SYMBOL_GPL(mlog_and_bits);
struct mlog_bits mlog_not_bits = MLOG_BITS_RHS(0);
EXPORT_SYMBOL_GPL(mlog_not_bits);

static ssize_t mlog_mask_show(u64 mask, char *buf)
{
 char *state;

 if (__mlog_test_u64(mask, mlog_and_bits))
  state = "allow";
 else if (__mlog_test_u64(mask, mlog_not_bits))
  state = "deny";
 else
  state = "off";

 return snprintf(buf, PAGE_SIZE, "%s\n", state);
}

static ssize_t mlog_mask_store(u64 mask, const char *buf, size_t count)
{
 if (!strncasecmp(buf, "allow", 5)) {
  __mlog_set_u64(mask, mlog_and_bits);
  __mlog_clear_u64(mask, mlog_not_bits);
 } else if (!strncasecmp(buf, "deny", 4)) {
  __mlog_set_u64(mask, mlog_not_bits);
  __mlog_clear_u64(mask, mlog_and_bits);
 } else if (!strncasecmp(buf, "off", 3)) {
  __mlog_clear_u64(mask, mlog_not_bits);
  __mlog_clear_u64(mask, mlog_and_bits);
 } else
  return -EINVAL;

 return count;
}

void __mlog_printk(const u64 *mask, const char *func, int line,
     const char *fmt, ...)
{
 struct va_format vaf;
 va_list args;
 const char *level;
 const char *prefix = "";

 if (!__mlog_test_u64(*mask, mlog_and_bits) ||
     __mlog_test_u64(*mask, mlog_not_bits))
  return;

 if (*mask & ML_ERROR) {
  level = KERN_ERR;
  prefix = "ERROR: ";
 } else if (*mask & ML_NOTICE) {
  level = KERN_NOTICE;
 } else {
  level = KERN_INFO;
 }

 va_start(args, fmt);

 vaf.fmt = fmt;
 vaf.va = &args;

 printk("%s(%s,%u,%u):%s:%d %s%pV",
        level, current->comm, task_pid_nr(current),
        raw_smp_processor_id(), func, line, prefix, &vaf);

 va_end(args);
}
EXPORT_SYMBOL_GPL(__mlog_printk);

struct mlog_attribute {
 struct attribute attr;
 u64 mask;
};

#define to_mlog_attr(_attr) container_of(_attr, struct mlog_attribute, attr)

#define define_mask(_name) {   \
 .attr = {    \
  .name = #_name,   \
  .mode = S_IRUGO | S_IWUSR, \
 },     \
 .mask = ML_##_name,   \
}

static struct mlog_attribute mlog_attrs[MLOG_MAX_BITS] = {
 define_mask(TCP),
 define_mask(MSG),
 define_mask(SOCKET),
 define_mask(HEARTBEAT),
 define_mask(HB_BIO),
 define_mask(DLMFS),
 define_mask(DLM),
 define_mask(DLM_DOMAIN),
 define_mask(DLM_THREAD),
 define_mask(DLM_MASTER),
 define_mask(DLM_RECOVERY),
 define_mask(DLM_GLUE),
 define_mask(VOTE),
 define_mask(CONN),
 define_mask(QUORUM),
 define_mask(BASTS),
 define_mask(CLUSTER),
 define_mask(ERROR),
 define_mask(NOTICE),
 define_mask(KTHREAD),
};

static struct attribute *mlog_default_attrs[MLOG_MAX_BITS] = {NULL, };
ATTRIBUTE_GROUPS(mlog_default);

static ssize_t mlog_show(struct kobject *obj, struct attribute *attr,
    char *buf)
{
 struct mlog_attribute *mlog_attr = to_mlog_attr(attr);

 return mlog_mask_show(mlog_attr->mask, buf);
}

static ssize_t mlog_store(struct kobject *obj, struct attribute *attr,
     const char *buf, size_t count)
{
 struct mlog_attribute *mlog_attr = to_mlog_attr(attr);

 return mlog_mask_store(mlog_attr->mask, buf, count);
}

static const struct sysfs_ops mlog_attr_ops = {
 .show  = mlog_show,
 .store = mlog_store,
};

static struct kobj_type mlog_ktype = {
 .default_groups = mlog_default_groups,
 .sysfs_ops      = &mlog_attr_ops,
};

static struct kset mlog_kset = {
 .kobj   = {.ktype = &mlog_ktype},
};

int mlog_sys_init(struct kset *o2cb_kset)
{
 int i = 0;

 while (mlog_attrs[i].attr.mode) {
  mlog_default_attrs[i] = &mlog_attrs[i].attr;
  i++;
 }
 mlog_default_attrs[i] = NULL;

 kobject_set_name(&mlog_kset.kobj, "logmask");
 mlog_kset.kobj.kset = o2cb_kset;
 return kset_register(&mlog_kset);
}

void mlog_sys_shutdown(void)
{
 kset_unregister(&mlog_kset);
}

Messung V0.5
C=92 H=96 G=93

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.