Message ID | 20181128091352.5088-1-suhua.tanke@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | lightnvm: pblk: add lock protection to list operations | expand |
> On 28 Nov 2018, at 10.13, Hua Su <suhua.tanke@gmail.com> wrote: > > Protect the list_add on the pblk_line_init_bb() error > path in case this code is used for some other purpose > in the future. > > Signed-off-by: Hua Su <suhua.tanke@gmail.com> > --- > drivers/lightnvm/pblk-core.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c > index 6944aac43b01..247112e1db94 100644 > --- a/drivers/lightnvm/pblk-core.c > +++ b/drivers/lightnvm/pblk-core.c > @@ -1295,15 +1295,22 @@ int pblk_line_recov_alloc(struct pblk *pblk, struct pblk_line *line) > > ret = pblk_line_alloc_bitmaps(pblk, line); > if (ret) > - return ret; > + goto fail; > > if (!pblk_line_init_bb(pblk, line, 0)) { > - list_add(&line->list, &l_mg->free_list); > - return -EINTR; > + ret = -EINTR; > + goto fail; > } > > pblk_rl_free_lines_dec(&pblk->rl, line, true); > return 0; > + > +fail: > + spin_lock(&l_mg->free_lock); > + list_add(&line->list, &l_mg->free_list); > + spin_unlock(&l_mg->free_lock); > + > + return ret; > } > > void pblk_line_recov_close(struct pblk *pblk, struct pblk_line *line) > -- > 2.19.1 Looks good to me. Reviewed-by: Javier González <javier@cnexlabs.com>
On 11/28/2018 10:16 AM, Javier Gonzalez wrote: >> On 28 Nov 2018, at 10.13, Hua Su <suhua.tanke@gmail.com> wrote: >> >> Protect the list_add on the pblk_line_init_bb() error >> path in case this code is used for some other purpose >> in the future. >> >> Signed-off-by: Hua Su <suhua.tanke@gmail.com> >> --- >> drivers/lightnvm/pblk-core.c | 13 ++++++++++--- >> 1 file changed, 10 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c >> index 6944aac43b01..247112e1db94 100644 >> --- a/drivers/lightnvm/pblk-core.c >> +++ b/drivers/lightnvm/pblk-core.c >> @@ -1295,15 +1295,22 @@ int pblk_line_recov_alloc(struct pblk *pblk, struct pblk_line *line) >> >> ret = pblk_line_alloc_bitmaps(pblk, line); >> if (ret) >> - return ret; >> + goto fail; >> >> if (!pblk_line_init_bb(pblk, line, 0)) { >> - list_add(&line->list, &l_mg->free_list); >> - return -EINTR; >> + ret = -EINTR; >> + goto fail; >> } >> >> pblk_rl_free_lines_dec(&pblk->rl, line, true); >> return 0; >> + >> +fail: >> + spin_lock(&l_mg->free_lock); >> + list_add(&line->list, &l_mg->free_list); >> + spin_unlock(&l_mg->free_lock); >> + >> + return ret; >> } >> >> void pblk_line_recov_close(struct pblk *pblk, struct pblk_line *line) >> -- >> 2.19.1 > > Looks good to me. > > Reviewed-by: Javier González <javier@cnexlabs.com> > Picked up for 4.21.
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index 6944aac43b01..247112e1db94 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c @@ -1295,15 +1295,22 @@ int pblk_line_recov_alloc(struct pblk *pblk, struct pblk_line *line) ret = pblk_line_alloc_bitmaps(pblk, line); if (ret) - return ret; + goto fail; if (!pblk_line_init_bb(pblk, line, 0)) { - list_add(&line->list, &l_mg->free_list); - return -EINTR; + ret = -EINTR; + goto fail; } pblk_rl_free_lines_dec(&pblk->rl, line, true); return 0; + +fail: + spin_lock(&l_mg->free_lock); + list_add(&line->list, &l_mg->free_list); + spin_unlock(&l_mg->free_lock); + + return ret; } void pblk_line_recov_close(struct pblk *pblk, struct pblk_line *line)
Protect the list_add on the pblk_line_init_bb() error path in case this code is used for some other purpose in the future. Signed-off-by: Hua Su <suhua.tanke@gmail.com> --- drivers/lightnvm/pblk-core.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)