|
@@ -413,6 +413,9 @@ struct list_head *pblk_line_gc_list(struct pblk *pblk, struct pblk_line *line)
|
|
|
}
|
|
|
} else {
|
|
|
line->state = PBLK_LINESTATE_CORRUPT;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
+
|
|
|
line->gc_group = PBLK_LINEGC_NONE;
|
|
|
move_list = &l_mg->corrupt_list;
|
|
|
pblk_err(pblk, "corrupted vsc for line %d, vsc:%d (%d/%d/%d)\n",
|
|
@@ -1019,6 +1022,8 @@ static int pblk_line_init_metadata(struct pblk *pblk, struct pblk_line *line,
|
|
|
spin_lock(&l_mg->free_lock);
|
|
|
spin_lock(&line->lock);
|
|
|
line->state = PBLK_LINESTATE_BAD;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
spin_unlock(&line->lock);
|
|
|
|
|
|
list_add_tail(&line->list, &l_mg->bad_list);
|
|
@@ -1166,6 +1171,8 @@ static int pblk_line_init_bb(struct pblk *pblk, struct pblk_line *line,
|
|
|
bitmap_weight(line->invalid_bitmap, lm->sec_per_line)) {
|
|
|
spin_lock(&line->lock);
|
|
|
line->state = PBLK_LINESTATE_BAD;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
spin_unlock(&line->lock);
|
|
|
|
|
|
list_add_tail(&line->list, &l_mg->bad_list);
|
|
@@ -1218,6 +1225,8 @@ static int pblk_line_prepare(struct pblk *pblk, struct pblk_line *line)
|
|
|
if (line->state == PBLK_LINESTATE_NEW) {
|
|
|
blk_to_erase = pblk_prepare_new_line(pblk, line);
|
|
|
line->state = PBLK_LINESTATE_FREE;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
} else {
|
|
|
blk_to_erase = blk_in_line;
|
|
|
}
|
|
@@ -1235,6 +1244,8 @@ static int pblk_line_prepare(struct pblk *pblk, struct pblk_line *line)
|
|
|
}
|
|
|
|
|
|
line->state = PBLK_LINESTATE_OPEN;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
|
|
|
atomic_set(&line->left_eblks, blk_to_erase);
|
|
|
atomic_set(&line->left_seblks, blk_to_erase);
|
|
@@ -1331,6 +1342,8 @@ retry:
|
|
|
if (unlikely(bit >= lm->blk_per_line)) {
|
|
|
spin_lock(&line->lock);
|
|
|
line->state = PBLK_LINESTATE_BAD;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
spin_unlock(&line->lock);
|
|
|
|
|
|
list_add_tail(&line->list, &l_mg->bad_list);
|
|
@@ -1650,6 +1663,8 @@ static void __pblk_line_put(struct pblk *pblk, struct pblk_line *line)
|
|
|
spin_lock(&line->lock);
|
|
|
WARN_ON(line->state != PBLK_LINESTATE_GC);
|
|
|
line->state = PBLK_LINESTATE_FREE;
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
line->gc_group = PBLK_LINEGC_NONE;
|
|
|
pblk_line_free(line);
|
|
|
|
|
@@ -1779,7 +1794,6 @@ void pblk_line_close(struct pblk *pblk, struct pblk_line *line)
|
|
|
WARN_ON(line->state != PBLK_LINESTATE_OPEN);
|
|
|
line->state = PBLK_LINESTATE_CLOSED;
|
|
|
move_list = pblk_line_gc_list(pblk, line);
|
|
|
-
|
|
|
list_add_tail(&line->list, move_list);
|
|
|
|
|
|
mempool_free(line->map_bitmap, l_mg->bitmap_pool);
|
|
@@ -1798,6 +1812,9 @@ void pblk_line_close(struct pblk *pblk, struct pblk_line *line)
|
|
|
|
|
|
spin_unlock(&line->lock);
|
|
|
spin_unlock(&l_mg->gc_lock);
|
|
|
+
|
|
|
+ trace_pblk_line_state(pblk_disk_name(pblk), line->id,
|
|
|
+ line->state);
|
|
|
}
|
|
|
|
|
|
void pblk_line_close_meta(struct pblk *pblk, struct pblk_line *line)
|