usr/src/uts/common/fs/zfs/sys/dmu_objset.h
author marks
Tue, 26 Jun 2007 07:44:24 -0700
changeset 4543 12bb2876a62e
parent 3835 063f0749804a
child 4787 602d3f97842c
permissions -rw-r--r--
PSARC/2006/465 ZFS Delegated Administration PSARC/2006/577 zpool property to disable delegation PSARC/2006/625 Enhancements to zpool history PSARC/2007/228 ZFS delegation amendments PSARC/2007/295 ZFS Delegated Administration Addendum 6280676 restore "owner" property 6349470 investigate non-root restore/backup 6572465 'zpool set bootfs=...' records history as 'zfs set bootfs=...'
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
/*
3547
e396e0a440b1 6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents: 2885
diff changeset
    22
 * Copyright 2007 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>
3547
e396e0a440b1 6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents: 2885
diff changeset
    32
#include <sys/arc.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#include <sys/txg.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#include <sys/zfs_context.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#include <sys/dnode.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
#include <sys/zio.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
#include <sys/zil.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
extern "C" {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
struct dsl_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
struct dmu_tx;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
struct objset_impl;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
typedef struct objset_phys {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    48
	dnode_phys_t os_meta_dnode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    49
	zil_header_t os_zil_header;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
	uint64_t os_type;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
	char os_pad[1024 - sizeof (dnode_phys_t) - sizeof (zil_header_t) -
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
	    sizeof (uint64_t)];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
} objset_phys_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    55
struct objset {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    56
	struct objset_impl *os;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
	int os_mode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    60
typedef struct objset_impl {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    61
	/* Immutable: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    62
	struct dsl_dataset *os_dsl_dataset;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    63
	spa_t *os_spa;
3547
e396e0a440b1 6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents: 2885
diff changeset
    64
	arc_buf_t *os_phys_buf;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
	objset_phys_t *os_phys;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    66
	dnode_t *os_meta_dnode;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    67
	zilog_t *os_zil;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    68
	objset_t os;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    69
	uint8_t os_checksum;	/* can change, under dsl_dir's locks */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    70
	uint8_t os_compress;	/* can change, under dsl_dir's locks */
3835
063f0749804a PSARC/2007/121 zfs set copies
ahrens
parents: 3547
diff changeset
    71
	uint8_t os_copies;	/* can change, under dsl_dir's locks */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
	uint8_t os_md_checksum;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
	uint8_t os_md_compress;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    74
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    75
	/* no lock needed: */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
	struct dmu_tx *os_synctx; /* XXX sketchy */
3547
e396e0a440b1 6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents: 2885
diff changeset
    77
	blkptr_t *os_rootbp;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
	/* Protected by os_obj_lock */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    80
	kmutex_t os_obj_lock;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    81
	uint64_t os_obj_next;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    82
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    83
	/* Protected by os_lock */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    84
	kmutex_t os_lock;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
	list_t os_dirty_dnodes[TXG_SIZE];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
	list_t os_free_dnodes[TXG_SIZE];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
	list_t os_dnodes;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    88
	list_t os_downgraded_dbufs;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    89
} objset_impl_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    90
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
    91
#define	DMU_META_DNODE_OBJECT	0
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
/* called from zpl */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
int dmu_objset_open(const char *name, dmu_objset_type_t type, int mode,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    95
    objset_t **osp);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
void dmu_objset_close(objset_t *os);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
int dmu_objset_create(const char *name, dmu_objset_type_t type,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
    objset_t *clone_parent,
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 3835
diff changeset
    99
    void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
int dmu_objset_destroy(const char *name);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   101
int dmu_objset_rollback(const char *name);
2199
712a788c2dfd PSARC 2006/388 snapshot -r
ahrens
parents: 1646
diff changeset
   102
int dmu_objset_snapshot(char *fsname, char *snapname, boolean_t recursive);
2885
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2199
diff changeset
   103
void dmu_objset_stats(objset_t *os, nvlist_t *nv);
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2199
diff changeset
   104
void dmu_objset_fast_stat(objset_t *os, dmu_objset_stats_t *stat);
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2199
diff changeset
   105
void dmu_objset_space(objset_t *os, uint64_t *refdbytesp, uint64_t *availbytesp,
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2199
diff changeset
   106
    uint64_t *usedobjsp, uint64_t *availobjsp);
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2199
diff changeset
   107
uint64_t dmu_objset_fsid_guid(objset_t *os);
2199
712a788c2dfd PSARC 2006/388 snapshot -r
ahrens
parents: 1646
diff changeset
   108
int dmu_objset_find(char *name, int func(char *, void *), void *arg,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   109
    int flags);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   110
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
   111
int dmu_objset_evict_dbufs(objset_t *os, int try);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   112
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   113
/* called from dsl */
3547
e396e0a440b1 6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents: 2885
diff changeset
   114
void dmu_objset_sync(objset_impl_t *os, zio_t *zio, dmu_tx_t *tx);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   115
objset_impl_t *dmu_objset_create_impl(spa_t *spa, struct dsl_dataset *ds,
3547
e396e0a440b1 6512391 DMU should leverage ZIO dependencies to achieve greater parallelism
maybee
parents: 2885
diff changeset
   116
    blkptr_t *bp, dmu_objset_type_t type, dmu_tx_t *tx);
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 789
diff changeset
   117
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
   118
    objset_impl_t **osip);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   119
void dmu_objset_evict(struct dsl_dataset *ds, void *arg);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   120
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   121
#ifdef	__cplusplus
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   122
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   123
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   124
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   125
#endif /* _SYS_DMU_OBJSET_H */