zfs.c revision 49e3519a3f3d730d3bd8870c05aaed24d89cf272
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * CDDL HEADER START
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * The contents of this file are subject to the terms of the
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * Common Development and Distribution License (the "License").
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * You may not use this file except in compliance with the License.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * See the License for the specific language governing permissions
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * and limitations under the License.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * When distributing Covered Code, include this CDDL HEADER in each
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * If applicable, add the following below this CDDL HEADER, with the
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * fields enclosed by brackets "[]" replaced with your own identifying
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * information: Portions Copyright [yyyy] [name of copyright owner]
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * CDDL HEADER END
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf * Use is subject to license terms.
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#pragma ident "%Z%%M% %I% %E% SMI"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf#include "../genunix/list.h"
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfstatic char *
507c32411f3f101e90ca2120f042b5ee698ba1d5mlflocal_strdup(const char *s)
507c32411f3f101e90ca2120f042b5ee698ba1d5mlfgetmember(uintptr_t addr, const char *type, mdb_ctf_id_t *idp,
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf mdb_warn("couldn't find member %s of type %s\n", member, type);
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf mdb_warn("member %s of type %s is unsupported bitfield",
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf /* mdb_warn("read %s from %s at %p+%llx\n", member, type, addr, off); */
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf return (0);
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf getmember(addr, #type, NULL, #member, sizeof (dest), &(dest))
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf getmember(addr, NULL, ctfid, #member, sizeof (dest), &(dest))
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf static int gotid;
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if (mdb_ctf_lookup_by_name("struct refcount", &rc_id) == -1) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf mdb_warn("couldn't find member %s of type %s\n", member, name);
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if (mdb_lookup_by_obj(MDB_TGT_OBJ_EVERY, sym_name, &sym)) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if (mdb_vread(*bufp, sym.st_size, sym.st_value) == -1) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf char *ddata[] = { "ALLOC", "FREE", "CONDENSE", "INVALID" };
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf if (mdb_vread(&entry, sizeof (entry), wsp->walk_addr) == -1) {
507c32411f3f101e90ca2120f042b5ee698ba1d5mlf mdb_warn("failed to read freelist entry %p", wsp->walk_addr);
static int gotid;
if (!gotid) {
return (DCMD_ERR);
return (DCMD_ERR);
if (dd_parent) {
return (DCMD_ERR);
if (dd_myname[0])
static int gotid;
if (!gotid) {
return (DCMD_ERR);
return (DCMD_ERR);
return (DCMD_ERR);
if (os_dsl_dataset == 0) {
return (DCMD_ERR);
return (DCMD_ERR);
if (ds_snapname[0]) {
const char *prefix)
const char *cp;
return (DCMD_ERR);
return (DCMD_OK);
static const char *params[] = {
int sz;
return (DCMD_OK);
return (DCMD_ERR);
return (DCMD_ERR);
for (i = 0; i < DMU_OT_NUMTYPES; i++) {
return (DCMD_ERR);
for (i = 0; i < ZIO_CHECKSUM_FUNCTIONS; i++) {
return (DCMD_ERR);
for (i = 0; i < ZIO_COMPRESS_FUNCTIONS; i++) {
return (DCMD_OK);
return (DCMD_ERR);
return (WALK_ERR);
return (WALK_ERR);
return (WALK_ERR);
return (DCMD_OK);
int i, maxidx;
return (DCMD_ERR);
for (i = 0; i < HISTOSZ; i++) {
histo[i] = 0;
histo2[i] = 0;
ndbufs = 0;
int len;
return (DCMD_ERR);
len = 0;
while (dbp != 0) {
return (DCMD_ERR);
histo2[i]++;
len++;
ndbufs++;
maxidx = 0;
for (i = 0; i < HISTOSZ; i++)
if (histo[i] > 0)
maxidx = i;
for (i = 0; i <= maxidx; i++)
maxidx = 0;
for (i = 0; i < HISTOSZ; i++)
if (histo2[i] > 0)
maxidx = i;
for (i = 0; i <= maxidx; i++)
return (DCMD_OK);
typedef struct dbufs_data {
char *osname;
} dbufs_data_t;
return (WALK_ERR);
return (WALK_NEXT);
return (DCMD_USAGE);
if (object) {
if (blkid) {
return (DCMD_ERR);
return (DCMD_ERR);
return (DCMD_OK);
typedef struct abuf_find_data {
return (WALK_ERR);
return (WALK_NEXT);
const char *syms[] = {
return (DCMD_USAGE);
case MDB_TYPE_STRING:
case MDB_TYPE_IMMEDIATE:
return (DCMD_USAGE);
return (DCMD_ERR);
return (DCMD_ERR);
return (DCMD_ERR);
return (DCMD_OK);
abuf_help(void)
const char *state;
return (DCMD_USAGE);
return (DCMD_ERR);
return (DCMD_OK);
return (DCMD_OK);
return (DCMD_ERR);
return (DCMD_ERR);
if (config) {
return (DCMD_ERR);
mdb_arg_t v;
&v) != DCMD_OK)
return (DCMD_ERR);
return (DCMD_OK);
return (DCMD_USAGE);
return (DCMD_ERR);
return (DCMD_OK);
0, NULL));
vdev_help(void)
int recursive)
int c, children;
return (DCMD_ERR);
return (DCMD_ERR);
return (DCMD_ERR);
case VDEV_STATE_CLOSED:
case VDEV_STATE_OFFLINE:
case VDEV_STATE_CANT_OPEN:
case VDEV_STATE_DEGRADED:
case VDEV_STATE_HEALTHY:
case VDEV_AUX_NONE:
case VDEV_AUX_OPEN_FAILED:
case VDEV_AUX_CORRUPT_DATA:
case VDEV_AUX_NO_REPLICAS:
case VDEV_AUX_BAD_GUID_SUM:
case VDEV_AUX_TOO_SMALL:
case VDEV_AUX_BAD_LABEL:
if (stats) {
if (stats)
return (DCMD_OK);
return (DCMD_ERR);
for (c = 0; c < children; c++) {
return (DCMD_ERR);
return (DCMD_OK);
return (DCMD_USAGE);
return (DCMD_ERR);
typedef struct metaslab_walk_data {
int mw_curvdev;
int mw_curms;
return (WALK_DONE);
return (WALK_ERR);
return (WALK_ERR);
return (WALK_NEXT);
return (WALK_ERR);
return (WALK_ERR);
return (DCMD_ERR);
return (DCMD_ERR);
return (WALK_NEXT);
typedef struct mdb_spa {
} mdb_spa_t;
typedef struct mdb_dsl_dir {
typedef struct mdb_dsl_dir_phys {
typedef struct mdb_vdev {
} mdb_vdev_t;
typedef struct mdb_metaslab {
typedef struct space_data {
} space_data_t;
return (WALK_ERR);
return (WALK_NEXT);
argc)
return (DCMD_USAGE);
return (DCMD_USAGE);
if (bits) {
shift = 0;
return (DCMD_ERR);
return (DCMD_ERR);
return (DCMD_OK);
return (DCMD_USAGE);
return (DCMD_ERR);
return (DCMD_OK);
return (DCMD_OK);
mdb_arg_t v;
return (DCMD_USAGE);
return (DCMD_USAGE);
return (DCMD_ERR);
return (DCMD_OK);
typedef struct txg_list_walk_data {
int lw_txgoff;
int lw_maxoff;
void *lw_obj;
return (WALK_ERR);
for (i = 0; i < TXG_SIZE; i++)
return (WALK_NEXT);
int status;
return (WALK_DONE);
return (WALK_ERR);
return (status);
return (WALK_ERR);
return (WALK_ERR);
return (WALK_ERR);
return (WALK_NEXT);
return (WALK_ERR);
abuf_find },
{ NULL }
#ifndef _KERNEL
{ NULL }
const mdb_modinfo_t *
_mdb_init(void)
return (&modinfo);