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