Lines Matching refs:wsm

85 static struct zstd_workspace_manager wsm;  variable
112 spin_lock(&wsm.lock); in zstd_reclaim_timer_fn()
114 if (list_empty(&wsm.lru_list)) { in zstd_reclaim_timer_fn()
115 spin_unlock(&wsm.lock); in zstd_reclaim_timer_fn()
119 list_for_each_prev_safe(pos, next, &wsm.lru_list) { in zstd_reclaim_timer_fn()
136 if (list_empty(&wsm.idle_ws[level - 1])) in zstd_reclaim_timer_fn()
137 clear_bit(level - 1, &wsm.active_map); in zstd_reclaim_timer_fn()
141 if (!list_empty(&wsm.lru_list)) in zstd_reclaim_timer_fn()
142 mod_timer(&wsm.timer, jiffies + ZSTD_BTRFS_RECLAIM_JIFFIES); in zstd_reclaim_timer_fn()
144 spin_unlock(&wsm.lock); in zstd_reclaim_timer_fn()
181 wsm.ops = &btrfs_zstd_compress; in zstd_init_workspace_manager()
182 spin_lock_init(&wsm.lock); in zstd_init_workspace_manager()
183 init_waitqueue_head(&wsm.wait); in zstd_init_workspace_manager()
184 timer_setup(&wsm.timer, zstd_reclaim_timer_fn, 0); in zstd_init_workspace_manager()
186 INIT_LIST_HEAD(&wsm.lru_list); in zstd_init_workspace_manager()
188 INIT_LIST_HEAD(&wsm.idle_ws[i]); in zstd_init_workspace_manager()
195 set_bit(ZSTD_BTRFS_MAX_LEVEL - 1, &wsm.active_map); in zstd_init_workspace_manager()
196 list_add(ws, &wsm.idle_ws[ZSTD_BTRFS_MAX_LEVEL - 1]); in zstd_init_workspace_manager()
205 spin_lock_bh(&wsm.lock); in zstd_cleanup_workspace_manager()
207 while (!list_empty(&wsm.idle_ws[i])) { in zstd_cleanup_workspace_manager()
208 workspace = container_of(wsm.idle_ws[i].next, in zstd_cleanup_workspace_manager()
215 spin_unlock_bh(&wsm.lock); in zstd_cleanup_workspace_manager()
217 del_timer_sync(&wsm.timer); in zstd_cleanup_workspace_manager()
237 spin_lock_bh(&wsm.lock); in zstd_find_workspace()
238 for_each_set_bit_from(i, &wsm.active_map, ZSTD_BTRFS_MAX_LEVEL) { in zstd_find_workspace()
239 if (!list_empty(&wsm.idle_ws[i])) { in zstd_find_workspace()
240 ws = wsm.idle_ws[i].next; in zstd_find_workspace()
247 if (list_empty(&wsm.idle_ws[i])) in zstd_find_workspace()
248 clear_bit(i, &wsm.active_map); in zstd_find_workspace()
249 spin_unlock_bh(&wsm.lock); in zstd_find_workspace()
253 spin_unlock_bh(&wsm.lock); in zstd_find_workspace()
288 prepare_to_wait(&wsm.wait, &wait, TASK_UNINTERRUPTIBLE); in zstd_get_workspace()
290 finish_wait(&wsm.wait, &wait); in zstd_get_workspace()
312 spin_lock_bh(&wsm.lock); in zstd_put_workspace()
317 if (list_empty(&wsm.idle_ws[ZSTD_BTRFS_MAX_LEVEL - 1])) { in zstd_put_workspace()
321 list_add(&workspace->lru_list, &wsm.lru_list); in zstd_put_workspace()
322 if (!timer_pending(&wsm.timer)) in zstd_put_workspace()
323 mod_timer(&wsm.timer, in zstd_put_workspace()
328 set_bit(workspace->level - 1, &wsm.active_map); in zstd_put_workspace()
329 list_add(&workspace->list, &wsm.idle_ws[workspace->level - 1]); in zstd_put_workspace()
332 spin_unlock_bh(&wsm.lock); in zstd_put_workspace()
335 cond_wake_up(&wsm.wait); in zstd_put_workspace()