usr/src/uts/common/fs/zfs/sys/spa.h
changeset 1544 938876158511
parent 1354 81359ee1ee63
child 1635 0ab1193d47cb
equal deleted inserted replaced
1543:a02daabdf1b3 1544:938876158511
     1 /*
     1 /*
     2  * CDDL HEADER START
     2  * CDDL HEADER START
     3  *
     3  *
     4  * The contents of this file are subject to the terms of the
     4  * The contents of this file are subject to the terms of the
     5  * Common Development and Distribution License, Version 1.0 only
     5  * Common Development and Distribution License (the "License").
     6  * (the "License").  You may not use this file except in compliance
     6  * You may not use this file except in compliance with the License.
     7  * with the License.
       
     8  *
     7  *
     9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    10  * or http://www.opensolaris.org/os/licensing.
     9  * or http://www.opensolaris.org/os/licensing.
    11  * See the License for the specific language governing permissions
    10  * See the License for the specific language governing permissions
    12  * and limitations under the License.
    11  * and limitations under the License.
   290  * Routines found in spa.c
   289  * Routines found in spa.c
   291  */
   290  */
   292 
   291 
   293 /* state manipulation functions */
   292 /* state manipulation functions */
   294 extern int spa_open(const char *pool, spa_t **, void *tag);
   293 extern int spa_open(const char *pool, spa_t **, void *tag);
   295 extern int spa_get_stats(const char *pool, nvlist_t **config);
   294 extern int spa_get_stats(const char *pool, nvlist_t **config,
       
   295     char *altroot, size_t buflen);
   296 extern int spa_create(const char *pool, nvlist_t *config, char *altroot);
   296 extern int spa_create(const char *pool, nvlist_t *config, char *altroot);
   297 extern int spa_import(const char *pool, nvlist_t *config, char *altroot);
   297 extern int spa_import(const char *pool, nvlist_t *config, char *altroot);
   298 extern nvlist_t *spa_tryimport(nvlist_t *tryconfig);
   298 extern nvlist_t *spa_tryimport(nvlist_t *tryconfig);
   299 extern int spa_destroy(char *pool);
   299 extern int spa_destroy(char *pool);
   300 extern int spa_export(char *pool);
   300 extern int spa_export(char *pool);
       
   301 extern int spa_reset(char *pool);
       
   302 extern void spa_async_request(spa_t *spa, int flag);
       
   303 extern void spa_async_suspend(spa_t *spa);
       
   304 extern void spa_async_resume(spa_t *spa);
       
   305 extern spa_t *spa_inject_addref(char *pool);
       
   306 extern void spa_inject_delref(spa_t *spa);
       
   307 
       
   308 #define	SPA_ASYNC_REOPEN	0x01
       
   309 #define	SPA_ASYNC_REPLACE_DONE	0x02
       
   310 #define	SPA_ASYNC_SCRUB		0x04
       
   311 #define	SPA_ASYNC_RESILVER	0x08
   301 
   312 
   302 /* device manipulation */
   313 /* device manipulation */
   303 extern int spa_vdev_add(spa_t *spa, nvlist_t *nvroot);
   314 extern int spa_vdev_add(spa_t *spa, nvlist_t *nvroot);
   304 extern int spa_vdev_add_unlocked(spa_t *spa, nvlist_t *nvroot);
   315 extern int spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot,
   305 extern int spa_vdev_attach(spa_t *spa, const char *path, nvlist_t *nvroot,
       
   306     int replacing);
   316     int replacing);
   307 extern int spa_vdev_detach(spa_t *spa, const char *path, uint64_t guid,
   317 extern int spa_vdev_detach(spa_t *spa, uint64_t guid, int replace_done);
   308     int replace_done);
       
   309 extern void spa_vdev_replace_done(spa_t *spa);
       
   310 extern int spa_vdev_setpath(spa_t *spa, uint64_t guid, const char *newpath);
   318 extern int spa_vdev_setpath(spa_t *spa, uint64_t guid, const char *newpath);
   311 
   319 
   312 /* scrubbing */
   320 /* scrubbing */
   313 extern int spa_scrub(spa_t *spa, pool_scrub_type_t type, boolean_t force);
   321 extern int spa_scrub(spa_t *spa, pool_scrub_type_t type, boolean_t force);
   314 extern void spa_scrub_suspend(spa_t *spa);
   322 extern void spa_scrub_suspend(spa_t *spa);
   315 extern void spa_scrub_resume(spa_t *spa);
   323 extern void spa_scrub_resume(spa_t *spa);
   316 extern void spa_scrub_restart(spa_t *spa, uint64_t txg);
   324 extern void spa_scrub_restart(spa_t *spa, uint64_t txg);
       
   325 extern void spa_scrub_throttle(spa_t *spa, int direction);
   317 
   326 
   318 /* spa syncing */
   327 /* spa syncing */
   319 extern void spa_sync(spa_t *spa, uint64_t txg); /* only for DMU use */
   328 extern void spa_sync(spa_t *spa, uint64_t txg); /* only for DMU use */
   320 extern void spa_sync_allpools(void);
   329 extern void spa_sync_allpools(void);
   321 
   330 
   343 extern void spa_open_ref(spa_t *spa, void *tag);
   352 extern void spa_open_ref(spa_t *spa, void *tag);
   344 extern void spa_close(spa_t *spa, void *tag);
   353 extern void spa_close(spa_t *spa, void *tag);
   345 extern boolean_t spa_refcount_zero(spa_t *spa);
   354 extern boolean_t spa_refcount_zero(spa_t *spa);
   346 
   355 
   347 /* Pool configuration lock */
   356 /* Pool configuration lock */
   348 extern void spa_config_enter(spa_t *spa, krw_t rw);
   357 extern void spa_config_enter(spa_t *spa, krw_t rw, void *tag);
   349 extern void spa_config_exit(spa_t *spa);
   358 extern void spa_config_exit(spa_t *spa, void *tag);
   350 extern boolean_t spa_config_held(spa_t *spa, krw_t rw);
   359 extern boolean_t spa_config_held(spa_t *spa, krw_t rw);
   351 
   360 
   352 /* Pool vdev add/remove lock */
   361 /* Pool vdev add/remove lock */
   353 extern uint64_t spa_vdev_enter(spa_t *spa);
   362 extern uint64_t spa_vdev_enter(spa_t *spa);
   354 extern int spa_vdev_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error);
   363 extern int spa_vdev_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error);
   381 extern void spa_strfree(char *);
   390 extern void spa_strfree(char *);
   382 extern uint64_t spa_get_random(uint64_t range);
   391 extern uint64_t spa_get_random(uint64_t range);
   383 extern void sprintf_blkptr(char *buf, int len, blkptr_t *bp);
   392 extern void sprintf_blkptr(char *buf, int len, blkptr_t *bp);
   384 extern void spa_freeze(spa_t *spa);
   393 extern void spa_freeze(spa_t *spa);
   385 extern void spa_evict_all(void);
   394 extern void spa_evict_all(void);
       
   395 extern vdev_t *spa_lookup_by_guid(spa_t *spa, uint64_t guid);
       
   396 
       
   397 /* error handling */
       
   398 struct zbookmark;
       
   399 struct zio;
       
   400 extern void spa_log_error(spa_t *spa, struct zio *zio);
       
   401 extern void zfs_ereport_post(const char *class, spa_t *spa, vdev_t *vd,
       
   402     struct zio *zio, uint64_t stateoroffset, uint64_t length);
       
   403 extern void zfs_post_ok(spa_t *spa, vdev_t *vd);
       
   404 extern uint64_t spa_get_errlog_size(spa_t *spa);
       
   405 extern int spa_get_errlog(spa_t *spa, void *uaddr, size_t *count);
       
   406 extern void spa_errlog_rotate(spa_t *spa);
       
   407 extern void spa_errlog_drain(spa_t *spa);
       
   408 extern void spa_errlog_sync(spa_t *spa, uint64_t txg);
       
   409 extern int spa_bookmark_name(spa_t *spa, struct zbookmark *zb, char *ds,
       
   410     size_t dsname, char *obj, size_t objname, char *range, size_t rangelen);
       
   411 extern void spa_get_errlists(spa_t *spa, avl_tree_t *last, avl_tree_t *scrub);
   386 
   412 
   387 /* Initialization and termination */
   413 /* Initialization and termination */
   388 extern void spa_init(int flags);
   414 extern void spa_init(int flags);
   389 extern void spa_fini(void);
   415 extern void spa_fini(void);
   390 
   416