Lines Matching refs:wsm
85 static struct zstd_workspace_manager wsm;
108 spin_lock_bh(&wsm.lock);
110 if (list_empty(&wsm.lru_list)) {
111 spin_unlock_bh(&wsm.lock);
115 list_for_each_prev_safe(pos, next, &wsm.lru_list) {
132 if (list_empty(&wsm.idle_ws[level - 1]))
133 clear_bit(level - 1, &wsm.active_map);
137 if (!list_empty(&wsm.lru_list))
138 mod_timer(&wsm.timer, jiffies + ZSTD_BTRFS_RECLAIM_JIFFIES);
140 spin_unlock_bh(&wsm.lock);
177 wsm.ops = &btrfs_zstd_compress;
178 spin_lock_init(&wsm.lock);
179 init_waitqueue_head(&wsm.wait);
180 timer_setup(&wsm.timer, zstd_reclaim_timer_fn, 0);
182 INIT_LIST_HEAD(&wsm.lru_list);
184 INIT_LIST_HEAD(&wsm.idle_ws[i]);
191 set_bit(ZSTD_BTRFS_MAX_LEVEL - 1, &wsm.active_map);
192 list_add(ws, &wsm.idle_ws[ZSTD_BTRFS_MAX_LEVEL - 1]);
201 spin_lock_bh(&wsm.lock);
203 while (!list_empty(&wsm.idle_ws[i])) {
204 workspace = container_of(wsm.idle_ws[i].next,
211 spin_unlock_bh(&wsm.lock);
213 del_timer_sync(&wsm.timer);
233 spin_lock_bh(&wsm.lock);
234 for_each_set_bit_from(i, &wsm.active_map, ZSTD_BTRFS_MAX_LEVEL) {
235 if (!list_empty(&wsm.idle_ws[i])) {
236 ws = wsm.idle_ws[i].next;
243 if (list_empty(&wsm.idle_ws[i]))
244 clear_bit(i, &wsm.active_map);
245 spin_unlock_bh(&wsm.lock);
249 spin_unlock_bh(&wsm.lock);
284 prepare_to_wait(&wsm.wait, &wait, TASK_UNINTERRUPTIBLE);
286 finish_wait(&wsm.wait, &wait);
308 spin_lock_bh(&wsm.lock);
313 if (list_empty(&wsm.idle_ws[ZSTD_BTRFS_MAX_LEVEL - 1])) {
317 list_add(&workspace->lru_list, &wsm.lru_list);
318 if (!timer_pending(&wsm.timer))
319 mod_timer(&wsm.timer,
324 set_bit(workspace->level - 1, &wsm.active_map);
325 list_add(&workspace->list, &wsm.idle_ws[workspace->level - 1]);
328 spin_unlock_bh(&wsm.lock);
331 cond_wake_up(&wsm.wait);