drivers/target/iscsi/iscsi_target_stat.c

Source file repositories/reference/linux-study-clean/drivers/target/iscsi/iscsi_target_stat.c

File Facts

System
Linux kernel
Corpus path
drivers/target/iscsi/iscsi_target_stat.c
Extension
.c
Size
23248 bytes
Lines
799
Domain
Driver Families
Bucket
drivers/target
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0-or-later
/*******************************************************************************
 * Modern ConfigFS group context specific iSCSI statistics based on original
 * iscsi_target_mib.c code
 *
 * Copyright (c) 2011-2013 Datera, Inc.
 *
 * Author: Nicholas A. Bellinger <nab@linux-iscsi.org>
 *
 ******************************************************************************/

#include <linux/configfs.h>
#include <linux/export.h>
#include <scsi/iscsi_proto.h>
#include <target/target_core_base.h>

#include <target/iscsi/iscsi_target_core.h>
#include "iscsi_target_parameters.h"
#include "iscsi_target_device.h"
#include "iscsi_target_tpg.h"
#include "iscsi_target_util.h"
#include <target/iscsi/iscsi_target_stat.h>

#ifndef INITIAL_JIFFIES
#define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ))
#endif

/* Instance Attributes Table */
#define ISCSI_INST_NUM_NODES		1
#define ISCSI_INST_DESCR		"Storage Engine Target"
#define ISCSI_DISCONTINUITY_TIME	0

#define ISCSI_NODE_INDEX		1

#define ISPRINT(a)   ((a >= ' ') && (a <= '~'))

/****************************************************************************
 * iSCSI MIB Tables
 ****************************************************************************/
/*
 * Instance Attributes Table
 */
static struct iscsi_tiqn *iscsi_instance_tiqn(struct config_item *item)
{
	struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
			struct iscsi_wwn_stat_grps, iscsi_instance_group);
	return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
}

static ssize_t iscsi_stat_instance_inst_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "%u\n",
			iscsi_instance_tiqn(item)->tiqn_index);
}

static ssize_t iscsi_stat_instance_min_ver_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
}

static ssize_t iscsi_stat_instance_max_ver_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
}

static ssize_t iscsi_stat_instance_portals_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "%u\n",
			iscsi_instance_tiqn(item)->tiqn_num_tpg_nps);
}

static ssize_t iscsi_stat_instance_nodes_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES);
}

static ssize_t iscsi_stat_instance_sessions_show(struct config_item *item,
		char *page)
{
	return snprintf(page, PAGE_SIZE, "%u\n",
		iscsi_instance_tiqn(item)->tiqn_nsessions);
}

static ssize_t iscsi_stat_instance_fail_sess_show(struct config_item *item,
		char *page)

Annotation

Implementation Notes