Lines Matching refs:zwsm

112 	struct zstd_workspace_manager *zwsm =  in zstd_reclaim_timer_fn()  local
117 spin_lock(&zwsm->lock); in zstd_reclaim_timer_fn()
119 if (list_empty(&zwsm->lru_list)) { in zstd_reclaim_timer_fn()
120 spin_unlock(&zwsm->lock); in zstd_reclaim_timer_fn()
124 list_for_each_prev_safe(pos, next, &zwsm->lru_list) { in zstd_reclaim_timer_fn()
141 if (list_empty(&zwsm->idle_ws[level])) in zstd_reclaim_timer_fn()
142 clear_bit(level, &zwsm->active_map); in zstd_reclaim_timer_fn()
146 if (!list_empty(&zwsm->lru_list)) in zstd_reclaim_timer_fn()
147 mod_timer(&zwsm->timer, jiffies + ZSTD_BTRFS_RECLAIM_JIFFIES); in zstd_reclaim_timer_fn()
149 spin_unlock(&zwsm->lock); in zstd_reclaim_timer_fn()
184 struct zstd_workspace_manager *zwsm; in zstd_alloc_workspace_manager() local
188 zwsm = kzalloc(sizeof(*zwsm), GFP_KERNEL); in zstd_alloc_workspace_manager()
189 if (!zwsm) in zstd_alloc_workspace_manager()
192 spin_lock_init(&zwsm->lock); in zstd_alloc_workspace_manager()
193 init_waitqueue_head(&zwsm->wait); in zstd_alloc_workspace_manager()
194 timer_setup(&zwsm->timer, zstd_reclaim_timer_fn, 0); in zstd_alloc_workspace_manager()
196 INIT_LIST_HEAD(&zwsm->lru_list); in zstd_alloc_workspace_manager()
198 INIT_LIST_HEAD(&zwsm->idle_ws[i]); in zstd_alloc_workspace_manager()
199 fs_info->compr_wsm[BTRFS_COMPRESS_ZSTD] = zwsm; in zstd_alloc_workspace_manager()
205 set_bit(ZSTD_BTRFS_MAX_LEVEL - 1, &zwsm->active_map); in zstd_alloc_workspace_manager()
206 list_add(ws, &zwsm->idle_ws[ZSTD_BTRFS_MAX_LEVEL - 1]); in zstd_alloc_workspace_manager()
213 struct zstd_workspace_manager *zwsm = fs_info->compr_wsm[BTRFS_COMPRESS_ZSTD]; in zstd_free_workspace_manager() local
216 if (!zwsm) in zstd_free_workspace_manager()
219 spin_lock_bh(&zwsm->lock); in zstd_free_workspace_manager()
221 while (!list_empty(&zwsm->idle_ws[i])) { in zstd_free_workspace_manager()
222 workspace = container_of(zwsm->idle_ws[i].next, in zstd_free_workspace_manager()
229 spin_unlock_bh(&zwsm->lock); in zstd_free_workspace_manager()
230 timer_delete_sync(&zwsm->timer); in zstd_free_workspace_manager()
231 kfree(zwsm); in zstd_free_workspace_manager()
248 struct zstd_workspace_manager *zwsm = fs_info->compr_wsm[BTRFS_COMPRESS_ZSTD]; in zstd_find_workspace() local
253 ASSERT(zwsm); in zstd_find_workspace()
254 spin_lock_bh(&zwsm->lock); in zstd_find_workspace()
255 for_each_set_bit_from(i, &zwsm->active_map, ZSTD_BTRFS_MAX_LEVEL) { in zstd_find_workspace()
256 if (!list_empty(&zwsm->idle_ws[i])) { in zstd_find_workspace()
257 ws = zwsm->idle_ws[i].next; in zstd_find_workspace()
264 if (list_empty(&zwsm->idle_ws[i])) in zstd_find_workspace()
265 clear_bit(i, &zwsm->active_map); in zstd_find_workspace()
266 spin_unlock_bh(&zwsm->lock); in zstd_find_workspace()
270 spin_unlock_bh(&zwsm->lock); in zstd_find_workspace()
287 struct zstd_workspace_manager *zwsm = fs_info->compr_wsm[BTRFS_COMPRESS_ZSTD]; in zstd_get_workspace() local
291 ASSERT(zwsm); in zstd_get_workspace()
309 prepare_to_wait(&zwsm->wait, &wait, TASK_UNINTERRUPTIBLE); in zstd_get_workspace()
311 finish_wait(&zwsm->wait, &wait); in zstd_get_workspace()
332 struct zstd_workspace_manager *zwsm = fs_info->compr_wsm[BTRFS_COMPRESS_ZSTD]; in zstd_put_workspace() local
335 ASSERT(zwsm); in zstd_put_workspace()
336 spin_lock_bh(&zwsm->lock); in zstd_put_workspace()
341 if (list_empty(&zwsm->idle_ws[ZSTD_BTRFS_MAX_LEVEL - 1])) { in zstd_put_workspace()
345 list_add(&workspace->lru_list, &zwsm->lru_list); in zstd_put_workspace()
346 if (!timer_pending(&zwsm->timer)) in zstd_put_workspace()
347 mod_timer(&zwsm->timer, in zstd_put_workspace()
352 set_bit(workspace->level, &zwsm->active_map); in zstd_put_workspace()
353 list_add(&workspace->list, &zwsm->idle_ws[workspace->level]); in zstd_put_workspace()
356 spin_unlock_bh(&zwsm->lock); in zstd_put_workspace()
359 cond_wake_up(&zwsm->wait); in zstd_put_workspace()