usr/src/uts/common/fs/zfs/sys/dmu_objset.h
author eschrock
Tue, 16 May 2006 11:20:11 -0700
changeset 1986 628267397204
parent 1646 b4e43ae19fff
child 2199 712a788c2dfd
permissions -rw-r--r--
6424405 zpool import destroyed_pool can damage existing pool using same devices
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
     5
 * Common Development and Distribution License (the "License").
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
     6
 * You may not use this file except in compliance with the License.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
    22
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#ifndef	_SYS_DMU_OBJSET_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#define	_SYS_DMU_OBJSET_H
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#include <sys/spa.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
#include <sys/txg.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#include <sys/zfs_context.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#include <sys/dnode.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#include <sys/zio.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
#include <sys/zil.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
struct dsl_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
struct dmu_tx;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
struct objset_impl;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
typedef struct objset_phys {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
	dnode_phys_t os_meta_dnode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    48
	zil_header_t os_zil_header;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
	uint64_t os_type;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
	char os_pad[1024 - sizeof (dnode_phys_t) - sizeof (zil_header_t) -
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
	    sizeof (uint64_t)];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
} objset_phys_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
struct objset {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
	struct objset_impl *os;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
	int os_mode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
typedef struct objset_impl {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
	/* Immutable: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
	struct dsl_dataset *os_dsl_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
	spa_t *os_spa;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
	objset_phys_t *os_phys;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    64
	dnode_t *os_meta_dnode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
	zilog_t *os_zil;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    66
	objset_t os;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    67
	uint8_t os_checksum;	/* can change, under dsl_dir's locks */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    68
	uint8_t os_compress;	/* can change, under dsl_dir's locks */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    69
	uint8_t os_md_checksum;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    70
	uint8_t os_md_compress;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    71
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
	/* no lock needed: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
	struct dmu_tx *os_synctx; /* XXX sketchy */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
	blkptr_t os_rootbp;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    75
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
	/* Protected by os_obj_lock */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    77
	kmutex_t os_obj_lock;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
	uint64_t os_obj_next;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    80
	/* Protected by os_lock */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    81
	kmutex_t os_lock;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    82
	list_t os_dirty_dnodes[TXG_SIZE];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    83
	list_t os_free_dnodes[TXG_SIZE];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    84
	list_t os_dnodes;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
	list_t os_downgraded_dbufs;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
} objset_impl_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
    88
#define	DMU_META_DNODE_OBJECT	0
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    89
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    90
/* called from zpl */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    91
int dmu_objset_open(const char *name, dmu_objset_type_t type, int mode,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
    objset_t **osp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
void dmu_objset_close(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
int dmu_objset_create(const char *name, dmu_objset_type_t type,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    95
    objset_t *clone_parent,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
    void (*func)(objset_t *os, void *arg, dmu_tx_t *tx), void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
int dmu_objset_destroy(const char *name);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
int dmu_objset_rollback(const char *name);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    99
void dmu_objset_stats(objset_t *os, dmu_objset_stats_t *dds);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
void dmu_objset_find(char *name, void func(char *, void *), void *arg,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   101
    int flags);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   102
void dmu_objset_byteswap(void *buf, size_t size);
1646
b4e43ae19fff 6393443 Remove remaining txg_wait_synced() from zfs unmount path.
perrin
parents: 1544
diff changeset
   103
int dmu_objset_evict_dbufs(objset_t *os, int try);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   104
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   105
/* called from dsl */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   106
void dmu_objset_sync(objset_impl_t *os, dmu_tx_t *tx);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   107
objset_impl_t *dmu_objset_create_impl(spa_t *spa, struct dsl_dataset *ds,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   108
    dmu_objset_type_t type, dmu_tx_t *tx);
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
   109
int dmu_objset_open_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp,
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
   110
    objset_impl_t **osip);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   111
void dmu_objset_evict(struct dsl_dataset *ds, void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   112
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   113
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   114
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   115
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   116
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   117
#endif /* _SYS_DMU_OBJSET_H */