git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add snapdev=[hidden|visible] dataset property
[zfs.git]
/
module
/
zfs
/
space_map.c
diff --git
a/module/zfs/space_map.c
b/module/zfs/space_map.c
index
75b55d5
..
9c0cdb6
100644
(file)
--- a/
module/zfs/space_map.c
+++ b/
module/zfs/space_map.c
@@
-134,7
+134,7
@@
space_map_add(space_map_t *sm, uint64_t start, uint64_t size)
avl_remove(sm->sm_pp_root, ss_after);
ss = ss_after;
} else {
avl_remove(sm->sm_pp_root, ss_after);
ss = ss_after;
} else {
- ss = kmem_alloc(sizeof (*ss), KM_
SLEEP
);
+ ss = kmem_alloc(sizeof (*ss), KM_
PUSHPAGE
);
ss->ss_start = start;
ss->ss_end = end;
avl_insert(&sm->sm_root, ss, where);
ss->ss_start = start;
ss->ss_end = end;
avl_insert(&sm->sm_root, ss, where);
@@
-181,7
+181,7
@@
space_map_remove(space_map_t *sm, uint64_t start, uint64_t size)
avl_remove(sm->sm_pp_root, ss);
if (left_over && right_over) {
avl_remove(sm->sm_pp_root, ss);
if (left_over && right_over) {
- newseg = kmem_alloc(sizeof (*newseg), KM_
SLEEP
);
+ newseg = kmem_alloc(sizeof (*newseg), KM_
PUSHPAGE
);
newseg->ss_start = end;
newseg->ss_end = ss->ss_end;
ss->ss_end = start;
newseg->ss_start = end;
newseg->ss_end = ss->ss_end;
ss->ss_end = start;
@@
-258,8
+258,10
@@
space_map_load_wait(space_map_t *sm)
{
ASSERT(MUTEX_HELD(sm->sm_lock));
{
ASSERT(MUTEX_HELD(sm->sm_lock));
- while (sm->sm_loading)
+ while (sm->sm_loading) {
+ ASSERT(!sm->sm_loaded);
cv_wait(&sm->sm_load_cv, sm->sm_lock);
cv_wait(&sm->sm_load_cv, sm->sm_lock);
+ }
}
/*
}
/*
@@
-276,11
+278,8
@@
space_map_load(space_map_t *sm, space_map_ops_t *ops, uint8_t maptype,
int error = 0;
ASSERT(MUTEX_HELD(sm->sm_lock));
int error = 0;
ASSERT(MUTEX_HELD(sm->sm_lock));
-
- space_map_load_wait(sm);
-
- if (sm->sm_loaded)
- return (0);
+ ASSERT(!sm->sm_loaded);
+ ASSERT(!sm->sm_loading);
sm->sm_loading = B_TRUE;
end = smo->smo_objsize;
sm->sm_loading = B_TRUE;
end = smo->smo_objsize;
@@
-368,10
+367,8
@@
space_map_unload(space_map_t *sm)
uint64_t
space_map_maxsize(space_map_t *sm)
{
uint64_t
space_map_maxsize(space_map_t *sm)
{
- if (sm->sm_loaded && sm->sm_ops != NULL)
- return (sm->sm_ops->smop_max(sm));
- else
- return (-1ULL);
+ ASSERT(sm->sm_ops != NULL);
+ return (sm->sm_ops->smop_max(sm));
}
uint64_t
}
uint64_t
@@
-554,7
+551,7
@@
space_map_ref_add_node(avl_tree_t *t, uint64_t offset, int64_t refcnt)
{
space_ref_t *sr;
{
space_ref_t *sr;
- sr = kmem_alloc(sizeof (*sr), KM_
SLEEP
);
+ sr = kmem_alloc(sizeof (*sr), KM_
PUSHPAGE
);
sr->sr_offset = offset;
sr->sr_refcnt = refcnt;
sr->sr_offset = offset;
sr->sr_refcnt = refcnt;