Lines Matching refs:line
50 kref_put(&gc_rq->line->ref, pblk_line_put);
62 void pblk_put_line_back(struct pblk *pblk, struct pblk_line *line)
68 spin_lock(&line->lock);
69 WARN_ON(line->state != PBLK_LINESTATE_GC);
70 line->state = PBLK_LINESTATE_CLOSED;
71 trace_pblk_line_state(pblk_disk_name(pblk), line->id,
72 line->state);
76 * since right now current line is not on any of the
79 line->gc_group = PBLK_LINEGC_NONE;
80 move_list = pblk_line_gc_list(pblk, line);
81 spin_unlock(&line->lock);
82 list_add_tail(&line->list, move_list);
92 struct pblk_line *line = gc_rq_ws->line;
101 line->w_err_gc->has_gc_err = 1;
127 kref_put(&line->ref, pblk_line_put);
132 struct pblk_line *line)
144 ret = pblk_line_emeta_read(pblk, line, emeta_buf);
146 pblk_err(pblk, "line %d read emeta failed (%d)\n",
147 line->id, ret);
153 * For now, leave the line untouched.
155 * all sectors on the line.
160 pblk_err(pblk, "inconsistent emeta (line %d)\n",
161 line->id);
181 struct pblk_line *line = line_ws->line;
196 if (line->w_err_gc->has_write_err) {
197 lba_list = line->w_err_gc->lba_list;
198 line->w_err_gc->lba_list = NULL;
200 lba_list = get_lba_list_from_emeta(pblk, line);
202 pblk_err(pblk, "could not interpret emeta (line %d)\n",
203 line->id);
208 spin_lock(&line->lock);
209 bitmap_copy(invalid_bitmap, line->invalid_bitmap, lm->sec_per_line);
210 sec_left = pblk_line_vsc(line);
211 spin_unlock(&line->lock);
214 pblk_err(pblk, "corrupted GC line (%d)\n", line->id);
228 if (bit > line->emeta_ssec)
241 gc_rq->line = line;
252 gc_rq_ws->line = line;
262 kref_get(&line->ref);
276 kref_put(&line->ref, pblk_line_put);
293 * reference for line, since we do that only when we want to do
294 * gc to free line state transition.
296 pblk_put_line_back(pblk, line);
299 pblk_err(pblk, "failed to GC line %d\n", line->id);
302 static int pblk_gc_line(struct pblk *pblk, struct pblk_line *line)
307 pblk_debug(pblk, "line '%d' being reclaimed for GC\n", line->id);
314 line_ws->line = line;
346 struct pblk_line *line;
354 line = list_first_entry(&gc->r_list, struct pblk_line, list);
355 list_del(&line->list);
360 if (pblk_gc_line(pblk, line)) {
361 pblk_err(pblk, "failed to GC line %d\n", line->id);
364 list_add_tail(&line->list, &gc->r_list);
374 struct pblk_line *line, *victim;
379 list_for_each_entry(line, group_list, list) {
380 if (!atomic_read(&line->sec_to_update))
381 line_vsc = le32_to_cpu(*line->vsc);
383 victim = line;
411 struct pblk_line *line;
420 line = list_first_entry(&l_mg->gc_full_list,
423 spin_lock(&line->lock);
424 WARN_ON(line->state != PBLK_LINESTATE_CLOSED);
425 line->state = PBLK_LINESTATE_GC;
426 trace_pblk_line_state(pblk_disk_name(pblk), line->id,
427 line->state);
428 spin_unlock(&line->lock);
430 list_del(&line->list);
434 kref_put(&line->ref, pblk_line_put);
448 struct pblk_line *line;
465 line = pblk_gc_get_victim_line(pblk, group_list);
466 if (!line) {
471 spin_lock(&line->lock);
472 WARN_ON(line->state != PBLK_LINESTATE_CLOSED);
473 line->state = PBLK_LINESTATE_GC;
474 trace_pblk_line_state(pblk_disk_name(pblk), line->id,
475 line->state);
476 spin_unlock(&line->lock);
478 list_del(&line->list);
482 list_add_tail(&line->list, &gc->r_list);
660 /* Workqueue that reads valid sectors from a line and submit them to the
663 gc->gc_line_reader_wq = alloc_workqueue("pblk-gc-line-reader-wq",
666 pblk_err(pblk, "could not allocate GC line reader workqueue\n");