Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1628686 > unrolled thread

[PATCH 0/5] lightnvm: pblk extra patches for 4.12

Started by"Javier González" <jg@lightnvm.io>
First post2017-04-22 01:40 +0200
Last post2017-04-24 01:10 +0200
Articles 7 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/5] lightnvm: pblk extra patches for 4.12 "Javier González" <jg@lightnvm.io> - 2017-04-22 01:40 +0200
    [PATCH 4/5] lightnvm: pblk: free metadata on line alloc failure "Javier González" <jg@lightnvm.io> - 2017-04-22 01:40 +0200
      Re: [PATCH 4/5] lightnvm: pblk: free metadata on line alloc failure Matias Bjørling <mb@lightnvm.io> - 2017-04-22 11:10 +0200
    [PATCH 3/5] lightnvm: pblk: fix memory leak on error path "Javier González" <jg@lightnvm.io> - 2017-04-22 01:40 +0200
      Re: [PATCH 3/5] lightnvm: pblk: fix memory leak on error path Matias Bjørling <mb@lightnvm.io> - 2017-04-22 11:00 +0200
    Re: [PATCH 0/5] lightnvm: pblk extra patches for 4.12 Matias Bjørling <mb@lightnvm.io> - 2017-04-23 20:10 +0200
      Re: [PATCH 0/5] lightnvm: pblk extra patches for 4.12 Jens Axboe <axboe@kernel.dk> - 2017-04-24 01:10 +0200

#1628686 — [PATCH 0/5] lightnvm: pblk extra patches for 4.12

From"Javier González" <jg@lightnvm.io>
Date2017-04-22 01:40 +0200
Subject[PATCH 0/5] lightnvm: pblk extra patches for 4.12
Message-ID<tyQjD-3De-3@gated-at.bofh.it>
Hi Matias,

This is a couple of bug fixes for the pblk release patch.

Thanks,
Javier

Javier González (5):
  lightnvm: pblk: fix race condition on line retry
  lightnvm: pblk: fix bad error check
  lightnvm: pblk: fix memory leak on error path
  lightnvm: pblk: free metadata on line alloc failure
  lightnvm: pblk: fix erase counters on error fail

 drivers/lightnvm/pblk-core.c  | 60 ++++++++++++++++++++++++++-----------------
 drivers/lightnvm/pblk-gc.c    |  2 +-
 drivers/lightnvm/pblk-init.c  |  9 ++++---
 drivers/lightnvm/pblk-map.c   |  4 +--
 drivers/lightnvm/pblk-rl.c    |  6 +++--
 drivers/lightnvm/pblk-write.c |  7 +++--
 drivers/lightnvm/pblk.h       |  6 ++---
 7 files changed, 57 insertions(+), 37 deletions(-)

-- 
2.7.4

[toc] | [next] | [standalone]


#1628687 — [PATCH 4/5] lightnvm: pblk: free metadata on line alloc failure

From"Javier González" <jg@lightnvm.io>
Date2017-04-22 01:40 +0200
Subject[PATCH 4/5] lightnvm: pblk: free metadata on line alloc failure
Message-ID<tyQjE-3De-13@gated-at.bofh.it>
In reply to#1628686
When a line allocation fails, for example, due to having too many bad
blocks, free its metadata correctly.

Fixes: a4bd217b4326 "lightnvm: physical block device (pblk) target"

Signed-off-by: Javier González <javier@cnexlabs.com>
---
 drivers/lightnvm/pblk-core.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
index 7eb62ec..ac3742b 100644
--- a/drivers/lightnvm/pblk-core.c
+++ b/drivers/lightnvm/pblk-core.c
@@ -1127,6 +1127,7 @@ static struct pblk_line *pblk_line_retry(struct pblk *pblk,
 	spin_lock(&l_mg->free_lock);
 	retry_line = pblk_line_get(pblk);
 	if (!retry_line) {
+		l_mg->data_line = NULL;
 		spin_unlock(&l_mg->free_lock);
 		return NULL;
 	}
@@ -1134,18 +1135,17 @@ static struct pblk_line *pblk_line_retry(struct pblk *pblk,
 	retry_line->smeta = line->smeta;
 	retry_line->emeta = line->emeta;
 	retry_line->meta_line = line->meta_line;
-	retry_line->map_bitmap = line->map_bitmap;
-	retry_line->invalid_bitmap = line->invalid_bitmap;
 
-	line->map_bitmap = NULL;
-	line->invalid_bitmap = NULL;
-	line->smeta = NULL;
-	line->emeta = NULL;
+	pblk_line_free(pblk, line);
 	l_mg->data_line = retry_line;
 	spin_unlock(&l_mg->free_lock);
 
-	if (pblk_line_erase(pblk, retry_line))
+	if (pblk_line_erase(pblk, retry_line)) {
+		spin_lock(&l_mg->free_lock);
+		l_mg->data_line = NULL;
+		spin_unlock(&l_mg->free_lock);
 		return NULL;
+	}
 
 	pblk_rl_free_lines_dec(&pblk->rl, retry_line);
 
@@ -1299,6 +1299,8 @@ void pblk_line_free(struct pblk *pblk, struct pblk_line *line)
 
 	line->map_bitmap = NULL;
 	line->invalid_bitmap = NULL;
+	line->smeta = NULL;
+	line->emeta = NULL;
 }
 
 void pblk_line_put(struct kref *ref)
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1628809 — Re: [PATCH 4/5] lightnvm: pblk: free metadata on line alloc failure

FromMatias Bjørling <mb@lightnvm.io>
Date2017-04-22 11:10 +0200
SubjectRe: [PATCH 4/5] lightnvm: pblk: free metadata on line alloc failure
Message-ID<tyZdg-Wj-21@gated-at.bofh.it>
In reply to#1628687

On 04/22/2017 01:32 AM, Javier González wrote:
> When a line allocation fails, for example, due to having too many bad
> blocks, free its metadata correctly.
>
> Fixes: a4bd217b4326 "lightnvm: physical block device (pblk) target"
>
> Signed-off-by: Javier González <javier@cnexlabs.com>
> ---
>  drivers/lightnvm/pblk-core.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
> index 7eb62ec..ac3742b 100644
> --- a/drivers/lightnvm/pblk-core.c
> +++ b/drivers/lightnvm/pblk-core.c
> @@ -1127,6 +1127,7 @@ static struct pblk_line *pblk_line_retry(struct pblk *pblk,
>  	spin_lock(&l_mg->free_lock);
>  	retry_line = pblk_line_get(pblk);
>  	if (!retry_line) {
> +		l_mg->data_line = NULL;
>  		spin_unlock(&l_mg->free_lock);
>  		return NULL;
>  	}
> @@ -1134,18 +1135,17 @@ static struct pblk_line *pblk_line_retry(struct pblk *pblk,
>  	retry_line->smeta = line->smeta;
>  	retry_line->emeta = line->emeta;
>  	retry_line->meta_line = line->meta_line;
> -	retry_line->map_bitmap = line->map_bitmap;
> -	retry_line->invalid_bitmap = line->invalid_bitmap;
>
> -	line->map_bitmap = NULL;
> -	line->invalid_bitmap = NULL;
> -	line->smeta = NULL;
> -	line->emeta = NULL;
> +	pblk_line_free(pblk, line);
>  	l_mg->data_line = retry_line;
>  	spin_unlock(&l_mg->free_lock);
>
> -	if (pblk_line_erase(pblk, retry_line))
> +	if (pblk_line_erase(pblk, retry_line)) {
> +		spin_lock(&l_mg->free_lock);
> +		l_mg->data_line = NULL;
> +		spin_unlock(&l_mg->free_lock);
>  		return NULL;
> +	}
>
>  	pblk_rl_free_lines_dec(&pblk->rl, retry_line);
>
> @@ -1299,6 +1299,8 @@ void pblk_line_free(struct pblk *pblk, struct pblk_line *line)
>
>  	line->map_bitmap = NULL;
>  	line->invalid_bitmap = NULL;
> +	line->smeta = NULL;
> +	line->emeta = NULL;
>  }
>
>  void pblk_line_put(struct kref *ref)
>

Reviewed-by: Matias Bjørling <matias@cnexlabs.com>

[toc] | [prev] | [next] | [standalone]


#1628688 — [PATCH 3/5] lightnvm: pblk: fix memory leak on error path

From"Javier González" <jg@lightnvm.io>
Date2017-04-22 01:40 +0200
Subject[PATCH 3/5] lightnvm: pblk: fix memory leak on error path
Message-ID<tyQjE-3De-15@gated-at.bofh.it>
In reply to#1628686
When write recovery fails, Free memory for the recovery structure.

Fixes: a4bd217b4326 "lightnvm: physical block device (pblk) target"

Signed-off-by: Javier González <javier@cnexlabs.com>
---
 drivers/lightnvm/pblk-write.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c
index 74f7413..a896190 100644
--- a/drivers/lightnvm/pblk-write.c
+++ b/drivers/lightnvm/pblk-write.c
@@ -142,6 +142,7 @@ static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
 		/* Logic error */
 		if (bit > c_ctx->nr_valid) {
 			WARN_ONCE(1, "pblk: corrupted write request\n");
+			mempool_free(recovery, pblk->rec_pool);
 			goto out;
 		}
 
@@ -149,6 +150,7 @@ static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
 		entry = pblk_rb_sync_scan_entry(&pblk->rwb, &ppa);
 		if (!entry) {
 			pr_err("pblk: could not scan entry on write failure\n");
+			mempool_free(recovery, pblk->rec_pool);
 			goto out;
 		}
 
@@ -162,6 +164,7 @@ static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
 	ret = pblk_recov_setup_rq(pblk, c_ctx, recovery, comp_bits, c_entries);
 	if (ret) {
 		pr_err("pblk: could not recover from write failure\n");
+		mempool_free(recovery, pblk->rec_pool);
 		goto out;
 	}
 
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1628807 — Re: [PATCH 3/5] lightnvm: pblk: fix memory leak on error path

FromMatias Bjørling <mb@lightnvm.io>
Date2017-04-22 11:00 +0200
SubjectRe: [PATCH 3/5] lightnvm: pblk: fix memory leak on error path
Message-ID<tyZ3z-DT-5@gated-at.bofh.it>
In reply to#1628688

On 04/22/2017 01:32 AM, Javier González wrote:
> When write recovery fails, Free memory for the recovery structure.
>
> Fixes: a4bd217b4326 "lightnvm: physical block device (pblk) target"
>
> Signed-off-by: Javier González <javier@cnexlabs.com>
> ---
>  drivers/lightnvm/pblk-write.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c
> index 74f7413..a896190 100644
> --- a/drivers/lightnvm/pblk-write.c
> +++ b/drivers/lightnvm/pblk-write.c
> @@ -142,6 +142,7 @@ static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
>  		/* Logic error */
>  		if (bit > c_ctx->nr_valid) {
>  			WARN_ONCE(1, "pblk: corrupted write request\n");
> +			mempool_free(recovery, pblk->rec_pool);
>  			goto out;
>  		}
>
> @@ -149,6 +150,7 @@ static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
>  		entry = pblk_rb_sync_scan_entry(&pblk->rwb, &ppa);
>  		if (!entry) {
>  			pr_err("pblk: could not scan entry on write failure\n");
> +			mempool_free(recovery, pblk->rec_pool);
>  			goto out;
>  		}
>
> @@ -162,6 +164,7 @@ static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
>  	ret = pblk_recov_setup_rq(pblk, c_ctx, recovery, comp_bits, c_entries);
>  	if (ret) {
>  		pr_err("pblk: could not recover from write failure\n");
> +		mempool_free(recovery, pblk->rec_pool);
>  		goto out;
>  	}
>
>
Reviewed-by: Matias Bjørling <matias@cnexlabs.com>

[toc] | [prev] | [next] | [standalone]


#1629058

FromMatias Bjørling <mb@lightnvm.io>
Date2017-04-23 20:10 +0200
Message-ID<tzu7n-3tw-7@gated-at.bofh.it>
In reply to#1628686
On 04/22/2017 01:32 AM, Javier González wrote:
> Hi Matias,
>
> This is a couple of bug fixes for the pblk release patch.
>
> Thanks,
> Javier
>
> Javier González (5):
>   lightnvm: pblk: fix race condition on line retry
>   lightnvm: pblk: fix bad error check
>   lightnvm: pblk: fix memory leak on error path
>   lightnvm: pblk: free metadata on line alloc failure
>   lightnvm: pblk: fix erase counters on error fail
>
>  drivers/lightnvm/pblk-core.c  | 60 ++++++++++++++++++++++++++-----------------
>  drivers/lightnvm/pblk-gc.c    |  2 +-
>  drivers/lightnvm/pblk-init.c  |  9 ++++---
>  drivers/lightnvm/pblk-map.c   |  4 +--
>  drivers/lightnvm/pblk-rl.c    |  6 +++--
>  drivers/lightnvm/pblk-write.c |  7 +++--
>  drivers/lightnvm/pblk.h       |  6 ++---
>  7 files changed, 57 insertions(+), 37 deletions(-)
>

Hi Jens,

Could you pick these up as well? This will properly be the last for the 
4.12 window. Thank you!

-Matias

[toc] | [prev] | [next] | [standalone]


#1629089

FromJens Axboe <axboe@kernel.dk>
Date2017-04-24 01:10 +0200
Message-ID<tzyNH-6NS-9@gated-at.bofh.it>
In reply to#1629058
On Sun, Apr 23 2017, Matias Bjørling wrote:
> On 04/22/2017 01:32 AM, Javier González wrote:
> >Hi Matias,
> >
> >This is a couple of bug fixes for the pblk release patch.
> >
> >Thanks,
> >Javier
> >
> >Javier González (5):
> >  lightnvm: pblk: fix race condition on line retry
> >  lightnvm: pblk: fix bad error check
> >  lightnvm: pblk: fix memory leak on error path
> >  lightnvm: pblk: free metadata on line alloc failure
> >  lightnvm: pblk: fix erase counters on error fail
> >
> > drivers/lightnvm/pblk-core.c  | 60 ++++++++++++++++++++++++++-----------------
> > drivers/lightnvm/pblk-gc.c    |  2 +-
> > drivers/lightnvm/pblk-init.c  |  9 ++++---
> > drivers/lightnvm/pblk-map.c   |  4 +--
> > drivers/lightnvm/pblk-rl.c    |  6 +++--
> > drivers/lightnvm/pblk-write.c |  7 +++--
> > drivers/lightnvm/pblk.h       |  6 ++---
> > 7 files changed, 57 insertions(+), 37 deletions(-)
> >
> 
> Hi Jens,
> 
> Could you pick these up as well? This will properly be the last for
> the 4.12 window. Thank you!

Yep, added for 4.12, thanks.

-- 
Jens Axboe

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web