diff options
author | Matthew Ahrens <[email protected]> | 2012-12-23 15:57:14 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-01-08 10:35:43 -0800 |
commit | 753c38392ddff9d3cf140bb4d28f3bfba52c92d2 (patch) | |
tree | 628c9789ff88963dfdab65f37522640d13051dc8 /include/sys | |
parent | 91579709fccd3e55a21970742b66c388fb1403db (diff) |
Illumos #3104: eliminate empty bpobjs
3104 eliminate empty bpobjs
Reviewed by: George Wilson <[email protected]>
Reviewed by: Adam Leventhal <[email protected]>
Reviewed by: Christopher Siden <[email protected]>
Reviewed by: Garrett D'Amore <[email protected]>
Approved by: Eric Schrock <[email protected]>
References:
illumos/illumos-gate@f17457368189aa911f774c38c1f21875a568bdca
illumos changeset: 13782:8f78aae28a63
https://www.illumos.org/issues/3104
Ported-by: Brian Behlendorf <[email protected]>
Diffstat (limited to 'include/sys')
-rw-r--r-- | include/sys/bpobj.h | 3 | ||||
-rw-r--r-- | include/sys/dmu.h | 1 | ||||
-rw-r--r-- | include/sys/dsl_pool.h | 1 | ||||
-rw-r--r-- | include/sys/zap.h | 2 |
4 files changed, 7 insertions, 0 deletions
diff --git a/include/sys/bpobj.h b/include/sys/bpobj.h index 3771a9541..af975c734 100644 --- a/include/sys/bpobj.h +++ b/include/sys/bpobj.h @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #ifndef _SYS_BPOBJ_H @@ -67,7 +68,9 @@ typedef struct bpobj { typedef int bpobj_itor_t(void *arg, const blkptr_t *bp, dmu_tx_t *tx); uint64_t bpobj_alloc(objset_t *mos, int blocksize, dmu_tx_t *tx); +uint64_t bpobj_alloc_empty(objset_t *os, int blocksize, dmu_tx_t *tx); void bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx); +void bpobj_decr_empty(objset_t *os, dmu_tx_t *tx); int bpobj_open(bpobj_t *bpo, objset_t *mos, uint64_t object); void bpobj_close(bpobj_t *bpo); diff --git a/include/sys/dmu.h b/include/sys/dmu.h index ce3169731..7fc876be7 100644 --- a/include/sys/dmu.h +++ b/include/sys/dmu.h @@ -309,6 +309,7 @@ typedef void dmu_buf_evict_func_t(struct dmu_buf *db, void *user_ptr); #define DMU_POOL_SCAN "scan" #define DMU_POOL_FREE_BPOBJ "free_bpobj" #define DMU_POOL_BPTREE_OBJ "bptree_obj" +#define DMU_POOL_EMPTY_BPOBJ "empty_bpobj" /* * Allocate an object from this objset. The range of object numbers diff --git a/include/sys/dsl_pool.h b/include/sys/dsl_pool.h index 61c91f06c..ff5df1414 100644 --- a/include/sys/dsl_pool.h +++ b/include/sys/dsl_pool.h @@ -96,6 +96,7 @@ typedef struct dsl_pool { uint64_t dp_tmp_userrefs_obj; bpobj_t dp_free_bpobj; uint64_t dp_bptree_obj; + uint64_t dp_empty_bpobj; struct dsl_scan *dp_scan; diff --git a/include/sys/zap.h b/include/sys/zap.h index 4d7b31559..092669c8b 100644 --- a/include/sys/zap.h +++ b/include/sys/zap.h @@ -300,6 +300,8 @@ int zap_increment_int(objset_t *os, uint64_t obj, uint64_t key, int64_t delta, /* Here the key is an int and the value is a different int. */ int zap_add_int_key(objset_t *os, uint64_t obj, uint64_t key, uint64_t value, dmu_tx_t *tx); +int zap_update_int_key(objset_t *os, uint64_t obj, + uint64_t key, uint64_t value, dmu_tx_t *tx); int zap_lookup_int_key(objset_t *os, uint64_t obj, uint64_t key, uint64_t *valuep); |