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