xref: /onnv-gate/usr/src/uts/common/fs/zfs/sys/metaslab.h (revision 12296:7cf402a7f374)
1789Sahrens /*
2789Sahrens  * CDDL HEADER START
3789Sahrens  *
4789Sahrens  * The contents of this file are subject to the terms of the
51732Sbonwick  * Common Development and Distribution License (the "License").
61732Sbonwick  * You may not use this file except in compliance with the License.
7789Sahrens  *
8789Sahrens  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9789Sahrens  * or http://www.opensolaris.org/os/licensing.
10789Sahrens  * See the License for the specific language governing permissions
11789Sahrens  * and limitations under the License.
12789Sahrens  *
13789Sahrens  * When distributing Covered Code, include this CDDL HEADER in each
14789Sahrens  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15789Sahrens  * If applicable, add the following below this CDDL HEADER, with the
16789Sahrens  * fields enclosed by brackets "[]" replaced with your own identifying
17789Sahrens  * information: Portions Copyright [yyyy] [name of copyright owner]
18789Sahrens  *
19789Sahrens  * CDDL HEADER END
20789Sahrens  */
21789Sahrens /*
22*12296SLin.Ling@Sun.COM  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
23789Sahrens  */
24789Sahrens 
25789Sahrens #ifndef _SYS_METASLAB_H
26789Sahrens #define	_SYS_METASLAB_H
27789Sahrens 
28789Sahrens #include <sys/spa.h>
29789Sahrens #include <sys/space_map.h>
30789Sahrens #include <sys/txg.h>
31789Sahrens #include <sys/zio.h>
32789Sahrens #include <sys/avl.h>
33789Sahrens 
34789Sahrens #ifdef	__cplusplus
35789Sahrens extern "C" {
36789Sahrens #endif
37789Sahrens 
389480SGeorge.Wilson@Sun.COM extern space_map_ops_t *zfs_metaslab_ops;
399480SGeorge.Wilson@Sun.COM 
401732Sbonwick extern metaslab_t *metaslab_init(metaslab_group_t *mg, space_map_obj_t *smo,
411732Sbonwick     uint64_t start, uint64_t size, uint64_t txg);
42789Sahrens extern void metaslab_fini(metaslab_t *msp);
43789Sahrens extern void metaslab_sync(metaslab_t *msp, uint64_t txg);
44789Sahrens extern void metaslab_sync_done(metaslab_t *msp, uint64_t txg);
4511146SGeorge.Wilson@Sun.COM extern void metaslab_sync_reassess(metaslab_group_t *mg);
46789Sahrens 
477754SJeff.Bonwick@Sun.COM #define	METASLAB_HINTBP_FAVOR	0x0
487754SJeff.Bonwick@Sun.COM #define	METASLAB_HINTBP_AVOID	0x1
497754SJeff.Bonwick@Sun.COM #define	METASLAB_GANG_HEADER	0x2
507754SJeff.Bonwick@Sun.COM 
514527Sperrin extern int metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
527754SJeff.Bonwick@Sun.COM     blkptr_t *bp, int ncopies, uint64_t txg, blkptr_t *hintbp, int flags);
531807Sbonwick extern void metaslab_free(spa_t *spa, const blkptr_t *bp, uint64_t txg,
541807Sbonwick     boolean_t now);
551807Sbonwick extern int metaslab_claim(spa_t *spa, const blkptr_t *bp, uint64_t txg);
56789Sahrens 
5710594SGeorge.Wilson@Sun.COM extern metaslab_class_t *metaslab_class_create(spa_t *spa,
5810594SGeorge.Wilson@Sun.COM     space_map_ops_t *ops);
59789Sahrens extern void metaslab_class_destroy(metaslab_class_t *mc);
6010594SGeorge.Wilson@Sun.COM extern int metaslab_class_validate(metaslab_class_t *mc);
61789Sahrens 
6210922SJeff.Bonwick@Sun.COM extern void metaslab_class_space_update(metaslab_class_t *mc,
6310922SJeff.Bonwick@Sun.COM     int64_t alloc_delta, int64_t defer_delta,
6410922SJeff.Bonwick@Sun.COM     int64_t space_delta, int64_t dspace_delta);
6510922SJeff.Bonwick@Sun.COM extern uint64_t metaslab_class_get_alloc(metaslab_class_t *mc);
6610922SJeff.Bonwick@Sun.COM extern uint64_t metaslab_class_get_space(metaslab_class_t *mc);
6710922SJeff.Bonwick@Sun.COM extern uint64_t metaslab_class_get_dspace(metaslab_class_t *mc);
6810922SJeff.Bonwick@Sun.COM extern uint64_t metaslab_class_get_deferred(metaslab_class_t *mc);
6910922SJeff.Bonwick@Sun.COM 
70789Sahrens extern metaslab_group_t *metaslab_group_create(metaslab_class_t *mc,
71789Sahrens     vdev_t *vd);
72789Sahrens extern void metaslab_group_destroy(metaslab_group_t *mg);
7310974SJeff.Bonwick@Sun.COM extern void metaslab_group_activate(metaslab_group_t *mg);
7410974SJeff.Bonwick@Sun.COM extern void metaslab_group_passivate(metaslab_group_t *mg);
75789Sahrens 
76789Sahrens #ifdef	__cplusplus
77789Sahrens }
78789Sahrens #endif
79789Sahrens 
80789Sahrens #endif	/* _SYS_METASLAB_H */
81