Lines Matching refs:line
50 kref_put(&gc_rq->line->ref, pblk_line_put); in pblk_gc_write()
62 void pblk_put_line_back(struct pblk *pblk, struct pblk_line *line) in pblk_put_line_back() argument
68 spin_lock(&line->lock); in pblk_put_line_back()
69 WARN_ON(line->state != PBLK_LINESTATE_GC); in pblk_put_line_back()
70 line->state = PBLK_LINESTATE_CLOSED; in pblk_put_line_back()
71 trace_pblk_line_state(pblk_disk_name(pblk), line->id, in pblk_put_line_back()
72 line->state); in pblk_put_line_back()
79 line->gc_group = PBLK_LINEGC_NONE; in pblk_put_line_back()
80 move_list = pblk_line_gc_list(pblk, line); in pblk_put_line_back()
81 spin_unlock(&line->lock); in pblk_put_line_back()
82 list_add_tail(&line->list, move_list); in pblk_put_line_back()
92 struct pblk_line *line = gc_rq_ws->line; in pblk_gc_line_ws() local
101 line->w_err_gc->has_gc_err = 1; in pblk_gc_line_ws()
127 kref_put(&line->ref, pblk_line_put); in pblk_gc_line_ws()
132 struct pblk_line *line) in get_lba_list_from_emeta() argument
144 ret = pblk_line_emeta_read(pblk, line, emeta_buf); in get_lba_list_from_emeta()
147 line->id, ret); in get_lba_list_from_emeta()
161 line->id); in get_lba_list_from_emeta()
181 struct pblk_line *line = line_ws->line; in pblk_gc_line_prepare_ws() local
196 if (line->w_err_gc->has_write_err) { in pblk_gc_line_prepare_ws()
197 lba_list = line->w_err_gc->lba_list; in pblk_gc_line_prepare_ws()
198 line->w_err_gc->lba_list = NULL; in pblk_gc_line_prepare_ws()
200 lba_list = get_lba_list_from_emeta(pblk, line); in pblk_gc_line_prepare_ws()
203 line->id); in pblk_gc_line_prepare_ws()
208 spin_lock(&line->lock); in pblk_gc_line_prepare_ws()
209 bitmap_copy(invalid_bitmap, line->invalid_bitmap, lm->sec_per_line); in pblk_gc_line_prepare_ws()
210 sec_left = pblk_line_vsc(line); in pblk_gc_line_prepare_ws()
211 spin_unlock(&line->lock); in pblk_gc_line_prepare_ws()
214 pblk_err(pblk, "corrupted GC line (%d)\n", line->id); in pblk_gc_line_prepare_ws()
228 if (bit > line->emeta_ssec) in pblk_gc_line_prepare_ws()
241 gc_rq->line = line; in pblk_gc_line_prepare_ws()
252 gc_rq_ws->line = line; in pblk_gc_line_prepare_ws()
262 kref_get(&line->ref); in pblk_gc_line_prepare_ws()
276 kref_put(&line->ref, pblk_line_put); in pblk_gc_line_prepare_ws()
296 pblk_put_line_back(pblk, line); in pblk_gc_line_prepare_ws()
299 pblk_err(pblk, "failed to GC line %d\n", line->id); in pblk_gc_line_prepare_ws()
302 static int pblk_gc_line(struct pblk *pblk, struct pblk_line *line) in pblk_gc_line() argument
307 pblk_debug(pblk, "line '%d' being reclaimed for GC\n", line->id); in pblk_gc_line()
314 line_ws->line = line; in pblk_gc_line()
346 struct pblk_line *line; in pblk_gc_read() local
354 line = list_first_entry(&gc->r_list, struct pblk_line, list); in pblk_gc_read()
355 list_del(&line->list); in pblk_gc_read()
360 if (pblk_gc_line(pblk, line)) { in pblk_gc_read()
361 pblk_err(pblk, "failed to GC line %d\n", line->id); in pblk_gc_read()
364 list_add_tail(&line->list, &gc->r_list); in pblk_gc_read()
374 struct pblk_line *line, *victim; in pblk_gc_get_victim_line() local
379 list_for_each_entry(line, group_list, list) { in pblk_gc_get_victim_line()
380 if (!atomic_read(&line->sec_to_update)) in pblk_gc_get_victim_line()
381 line_vsc = le32_to_cpu(*line->vsc); in pblk_gc_get_victim_line()
383 victim = line; in pblk_gc_get_victim_line()
411 struct pblk_line *line; in pblk_gc_free_full_lines() local
420 line = list_first_entry(&l_mg->gc_full_list, in pblk_gc_free_full_lines()
423 spin_lock(&line->lock); in pblk_gc_free_full_lines()
424 WARN_ON(line->state != PBLK_LINESTATE_CLOSED); in pblk_gc_free_full_lines()
425 line->state = PBLK_LINESTATE_GC; in pblk_gc_free_full_lines()
426 trace_pblk_line_state(pblk_disk_name(pblk), line->id, in pblk_gc_free_full_lines()
427 line->state); in pblk_gc_free_full_lines()
428 spin_unlock(&line->lock); in pblk_gc_free_full_lines()
430 list_del(&line->list); in pblk_gc_free_full_lines()
434 kref_put(&line->ref, pblk_line_put); in pblk_gc_free_full_lines()
448 struct pblk_line *line; in pblk_gc_run() local
465 line = pblk_gc_get_victim_line(pblk, group_list); in pblk_gc_run()
466 if (!line) { in pblk_gc_run()
471 spin_lock(&line->lock); in pblk_gc_run()
472 WARN_ON(line->state != PBLK_LINESTATE_CLOSED); in pblk_gc_run()
473 line->state = PBLK_LINESTATE_GC; in pblk_gc_run()
474 trace_pblk_line_state(pblk_disk_name(pblk), line->id, in pblk_gc_run()
475 line->state); in pblk_gc_run()
476 spin_unlock(&line->lock); in pblk_gc_run()
478 list_del(&line->list); in pblk_gc_run()
482 list_add_tail(&line->list, &gc->r_list); in pblk_gc_run()