/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include <nfs/nfs4_kprot.h>
/*
* Key to retrieve per-zone data corresponding to NFS kstats consumed by
* nfsstat(1m).
*/
/*
* Convenience routine to create a named kstat associated with zoneid, named
* module:0:name:"misc", using the provided template to initialize the names
* and values of the stats.
*/
static kstat_named_t *
{
}
return (ks_data);
}
/*
* Convenience routine to remove a kstat in specified zone with name
* module:0:name.
*/
static void
const char *name)
{
}
/*
* Server statistics. These are defined here, rather than in the server
* code, so that they can be referenced before the nfssrv kmod is loaded.
*
* The "calls" counter is a Contract Private interface covered by
* PSARC/2001/357. Please contact contract-2001-357-01@eng.sun.com before
* making any changes.
*/
{ "calls", KSTAT_DATA_UINT64 },
{ "badcalls", KSTAT_DATA_UINT64 },
{ "referrals", KSTAT_DATA_UINT64 },
{ "referlinks", KSTAT_DATA_UINT64 },
};
/* Points to the global zone server kstat data for all nfs versions */
static void
{
int vers;
/*
* first two indexes of these arrays are not used, so initialize
* to NULL
*/
global_svstat_ptr[0] = NULL;
global_svstat_ptr[0] = NULL;
if (zoneid == GLOBAL_ZONEID)
}
}
static void
{
int vers;
if (zoneid == GLOBAL_ZONEID)
}
}
/*
* NFSv2 client stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "setattr", KSTAT_DATA_UINT64 },
{ "root", KSTAT_DATA_UINT64 },
{ "lookup", KSTAT_DATA_UINT64 },
{ "readlink", KSTAT_DATA_UINT64 },
{ "read", KSTAT_DATA_UINT64 },
{ "wrcache", KSTAT_DATA_UINT64 },
{ "write", KSTAT_DATA_UINT64 },
{ "create", KSTAT_DATA_UINT64 },
{ "remove", KSTAT_DATA_UINT64 },
{ "rename", KSTAT_DATA_UINT64 },
{ "link", KSTAT_DATA_UINT64 },
{ "symlink", KSTAT_DATA_UINT64 },
{ "mkdir", KSTAT_DATA_UINT64 },
{ "rmdir", KSTAT_DATA_UINT64 },
{ "readdir", KSTAT_DATA_UINT64 },
{ "statfs", KSTAT_DATA_UINT64 }
};
static void
{
}
static void
{
}
/*
* NFSv2 server stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "setattr", KSTAT_DATA_UINT64 },
{ "root", KSTAT_DATA_UINT64 },
{ "lookup", KSTAT_DATA_UINT64 },
{ "readlink", KSTAT_DATA_UINT64 },
{ "read", KSTAT_DATA_UINT64 },
{ "wrcache", KSTAT_DATA_UINT64 },
{ "write", KSTAT_DATA_UINT64 },
{ "create", KSTAT_DATA_UINT64 },
{ "remove", KSTAT_DATA_UINT64 },
{ "rename", KSTAT_DATA_UINT64 },
{ "link", KSTAT_DATA_UINT64 },
{ "symlink", KSTAT_DATA_UINT64 },
{ "mkdir", KSTAT_DATA_UINT64 },
{ "rmdir", KSTAT_DATA_UINT64 },
{ "readdir", KSTAT_DATA_UINT64 },
{ "statfs", KSTAT_DATA_UINT64 }
};
static void
{
rfsproccnt_v2_tmpl, sizeof (rfsproccnt_v2_tmpl));
if (zoneid == GLOBAL_ZONEID)
}
static void
{
if (zoneid == GLOBAL_ZONEID)
}
/*
* NFSv2 client ACL stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getacl", KSTAT_DATA_UINT64 },
{ "setacl", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "access", KSTAT_DATA_UINT64 },
{ "getxattrdir", KSTAT_DATA_UINT64 }
};
static void
{
}
static void
{
}
/*
* NFSv2 server ACL stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getacl", KSTAT_DATA_UINT64 },
{ "setacl", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "access", KSTAT_DATA_UINT64 },
{ "getxattrdir", KSTAT_DATA_UINT64 }
};
static void
{
"aclproccnt_v2", aclproccnt_v2_tmpl,
sizeof (aclproccnt_v2_tmpl));
if (zoneid == GLOBAL_ZONEID)
}
static void
{
if (zoneid == GLOBAL_ZONEID)
}
/*
* NFSv3 client stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "setattr", KSTAT_DATA_UINT64 },
{ "lookup", KSTAT_DATA_UINT64 },
{ "access", KSTAT_DATA_UINT64 },
{ "readlink", KSTAT_DATA_UINT64 },
{ "read", KSTAT_DATA_UINT64 },
{ "write", KSTAT_DATA_UINT64 },
{ "create", KSTAT_DATA_UINT64 },
{ "mkdir", KSTAT_DATA_UINT64 },
{ "symlink", KSTAT_DATA_UINT64 },
{ "mknod", KSTAT_DATA_UINT64 },
{ "remove", KSTAT_DATA_UINT64 },
{ "rmdir", KSTAT_DATA_UINT64 },
{ "rename", KSTAT_DATA_UINT64 },
{ "link", KSTAT_DATA_UINT64 },
{ "readdir", KSTAT_DATA_UINT64 },
{ "readdirplus", KSTAT_DATA_UINT64 },
{ "fsstat", KSTAT_DATA_UINT64 },
{ "fsinfo", KSTAT_DATA_UINT64 },
{ "pathconf", KSTAT_DATA_UINT64 },
{ "commit", KSTAT_DATA_UINT64 }
};
static void
{
}
static void
{
}
/*
* NFSv3 server stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "setattr", KSTAT_DATA_UINT64 },
{ "lookup", KSTAT_DATA_UINT64 },
{ "access", KSTAT_DATA_UINT64 },
{ "readlink", KSTAT_DATA_UINT64 },
{ "read", KSTAT_DATA_UINT64 },
{ "write", KSTAT_DATA_UINT64 },
{ "create", KSTAT_DATA_UINT64 },
{ "mkdir", KSTAT_DATA_UINT64 },
{ "symlink", KSTAT_DATA_UINT64 },
{ "mknod", KSTAT_DATA_UINT64 },
{ "remove", KSTAT_DATA_UINT64 },
{ "rmdir", KSTAT_DATA_UINT64 },
{ "rename", KSTAT_DATA_UINT64 },
{ "link", KSTAT_DATA_UINT64 },
{ "readdir", KSTAT_DATA_UINT64 },
{ "readdirplus", KSTAT_DATA_UINT64 },
{ "fsstat", KSTAT_DATA_UINT64 },
{ "fsinfo", KSTAT_DATA_UINT64 },
{ "pathconf", KSTAT_DATA_UINT64 },
{ "commit", KSTAT_DATA_UINT64 }
};
static void
{
rfsproccnt_v3_tmpl, sizeof (rfsproccnt_v3_tmpl));
if (zoneid == GLOBAL_ZONEID)
}
static void
{
if (zoneid == GLOBAL_ZONEID)
}
/*
* NFSv3 client ACL stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getacl", KSTAT_DATA_UINT64 },
{ "setacl", KSTAT_DATA_UINT64 },
{ "getxattrdir", KSTAT_DATA_UINT64 }
};
static void
{
}
static void
{
}
/*
* NFSv3 server ACL stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getacl", KSTAT_DATA_UINT64 },
{ "setacl", KSTAT_DATA_UINT64 },
{ "getxattrdir", KSTAT_DATA_UINT64 }
};
static void
{
"aclproccnt_v3", aclproccnt_v3_tmpl,
sizeof (aclproccnt_v3_tmpl));
if (zoneid == GLOBAL_ZONEID)
}
static void
{
if (zoneid == GLOBAL_ZONEID)
}
/*
* NFSv4 client stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "compound", KSTAT_DATA_UINT64 },
{ "reserved", KSTAT_DATA_UINT64 },
{ "access", KSTAT_DATA_UINT64 },
{ "close", KSTAT_DATA_UINT64 },
{ "commit", KSTAT_DATA_UINT64 },
{ "create", KSTAT_DATA_UINT64 },
{ "delegpurge", KSTAT_DATA_UINT64 },
{ "delegreturn", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "getfh", KSTAT_DATA_UINT64 },
{ "link", KSTAT_DATA_UINT64 },
{ "lock", KSTAT_DATA_UINT64 },
{ "lockt", KSTAT_DATA_UINT64 },
{ "locku", KSTAT_DATA_UINT64 },
{ "lookup", KSTAT_DATA_UINT64 },
{ "lookupp", KSTAT_DATA_UINT64 },
{ "nverify", KSTAT_DATA_UINT64 },
{ "open", KSTAT_DATA_UINT64 },
{ "openattr", KSTAT_DATA_UINT64 },
{ "open_confirm", KSTAT_DATA_UINT64 },
{ "open_downgrade", KSTAT_DATA_UINT64 },
{ "putfh", KSTAT_DATA_UINT64 },
{ "putpubfh", KSTAT_DATA_UINT64 },
{ "putrootfh", KSTAT_DATA_UINT64 },
{ "read", KSTAT_DATA_UINT64 },
{ "readdir", KSTAT_DATA_UINT64 },
{ "readlink", KSTAT_DATA_UINT64 },
{ "remove", KSTAT_DATA_UINT64 },
{ "rename", KSTAT_DATA_UINT64 },
{ "renew", KSTAT_DATA_UINT64 },
{ "restorefh", KSTAT_DATA_UINT64 },
{ "savefh", KSTAT_DATA_UINT64 },
{ "secinfo", KSTAT_DATA_UINT64 },
{ "setattr", KSTAT_DATA_UINT64 },
{ "setclientid", KSTAT_DATA_UINT64 },
{ "setclientid_confirm", KSTAT_DATA_UINT64 },
{ "verify", KSTAT_DATA_UINT64 },
{ "write", KSTAT_DATA_UINT64 }
};
static void
{
}
static void
{
}
/*
* NFSv4 server stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "compound", KSTAT_DATA_UINT64 },
{ "reserved", KSTAT_DATA_UINT64 },
{ "access", KSTAT_DATA_UINT64 },
{ "close", KSTAT_DATA_UINT64 },
{ "commit", KSTAT_DATA_UINT64 },
{ "create", KSTAT_DATA_UINT64 },
{ "delegpurge", KSTAT_DATA_UINT64 },
{ "delegreturn", KSTAT_DATA_UINT64 },
{ "getattr", KSTAT_DATA_UINT64 },
{ "getfh", KSTAT_DATA_UINT64 },
{ "link", KSTAT_DATA_UINT64 },
{ "lock", KSTAT_DATA_UINT64 },
{ "lockt", KSTAT_DATA_UINT64 },
{ "locku", KSTAT_DATA_UINT64 },
{ "lookup", KSTAT_DATA_UINT64 },
{ "lookupp", KSTAT_DATA_UINT64 },
{ "nverify", KSTAT_DATA_UINT64 },
{ "open", KSTAT_DATA_UINT64 },
{ "openattr", KSTAT_DATA_UINT64 },
{ "open_confirm", KSTAT_DATA_UINT64 },
{ "open_downgrade", KSTAT_DATA_UINT64 },
{ "putfh", KSTAT_DATA_UINT64 },
{ "putpubfh", KSTAT_DATA_UINT64 },
{ "putrootfh", KSTAT_DATA_UINT64 },
{ "read", KSTAT_DATA_UINT64 },
{ "readdir", KSTAT_DATA_UINT64 },
{ "readlink", KSTAT_DATA_UINT64 },
{ "remove", KSTAT_DATA_UINT64 },
{ "rename", KSTAT_DATA_UINT64 },
{ "renew", KSTAT_DATA_UINT64 },
{ "restorefh", KSTAT_DATA_UINT64 },
{ "savefh", KSTAT_DATA_UINT64 },
{ "secinfo", KSTAT_DATA_UINT64 },
{ "setattr", KSTAT_DATA_UINT64 },
{ "setclientid", KSTAT_DATA_UINT64 },
{ "setclientid_confirm", KSTAT_DATA_UINT64 },
{ "verify", KSTAT_DATA_UINT64 },
{ "write", KSTAT_DATA_UINT64 },
{ "release_lockowner", KSTAT_DATA_UINT64 },
{ "illegal", KSTAT_DATA_UINT64 },
};
static void
{
rfsproccnt_v4_tmpl, sizeof (rfsproccnt_v4_tmpl));
if (zoneid == GLOBAL_ZONEID)
}
static void
{
if (zoneid == GLOBAL_ZONEID)
}
/*
* NFSv4 client ACL stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getacl", KSTAT_DATA_UINT64 },
{ "setacl", KSTAT_DATA_UINT64 },
};
static void
{
}
static void
{
}
/*
* NFSv4 server ACL stats
*/
{ "null", KSTAT_DATA_UINT64 },
{ "getacl", KSTAT_DATA_UINT64 },
{ "setacl", KSTAT_DATA_UINT64 }
};
static void
{
"aclproccnt_v4", aclproccnt_v4_tmpl,
sizeof (aclproccnt_v4_tmpl));
if (zoneid == GLOBAL_ZONEID)
}
static void
{
if (zoneid == GLOBAL_ZONEID)
}
/*
* Zone initializer callback to setup the kstats.
*/
void *
{
/*
* Initialize all versions of the nfs_server
*/
/*
* Initialize v2 stats
*/
/*
* Initialize v3 stats
*/
/*
* Initialize v4 stats
*/
return (nfs_stats_ptr);
}
/*
* Zone destructor callback to tear down the various kstats.
*/
void
{
/*
* Free nfs:0:nfs_server stats
*/
/*
* Free v2 stats
*/
/*
* Free v3 stats
*/
/*
* Free v4 stats
*/
}