|
@@ -966,12 +966,14 @@ next:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- spin_lock(&l_mg->free_lock);
|
|
|
|
if (!open_lines) {
|
|
if (!open_lines) {
|
|
|
|
+ spin_lock(&l_mg->free_lock);
|
|
WARN_ON_ONCE(!test_and_clear_bit(meta_line,
|
|
WARN_ON_ONCE(!test_and_clear_bit(meta_line,
|
|
&l_mg->meta_bitmap));
|
|
&l_mg->meta_bitmap));
|
|
|
|
+ spin_unlock(&l_mg->free_lock);
|
|
pblk_line_replace_data(pblk);
|
|
pblk_line_replace_data(pblk);
|
|
} else {
|
|
} else {
|
|
|
|
+ spin_lock(&l_mg->free_lock);
|
|
/* Allocate next line for preparation */
|
|
/* Allocate next line for preparation */
|
|
l_mg->data_next = pblk_line_get(pblk);
|
|
l_mg->data_next = pblk_line_get(pblk);
|
|
if (l_mg->data_next) {
|
|
if (l_mg->data_next) {
|
|
@@ -979,8 +981,8 @@ next:
|
|
l_mg->data_next->type = PBLK_LINETYPE_DATA;
|
|
l_mg->data_next->type = PBLK_LINETYPE_DATA;
|
|
is_next = 1;
|
|
is_next = 1;
|
|
}
|
|
}
|
|
|
|
+ spin_unlock(&l_mg->free_lock);
|
|
}
|
|
}
|
|
- spin_unlock(&l_mg->free_lock);
|
|
|
|
|
|
|
|
if (is_next)
|
|
if (is_next)
|
|
pblk_line_erase(pblk, l_mg->data_next);
|
|
pblk_line_erase(pblk, l_mg->data_next);
|