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 |