2020-07-31 02:30:58

by Zhang, Qiang

[permalink] [raw]
Subject: [PATCH] mm/dmapool.c: add WARN_ON() in dma_pool_destroy

From: Zhang Qiang <[email protected]>

The pool is being destroyed, all page which in the pool,
should be free. if some page is still be use by somebody,
we should not just output error logs, also should also add
a warning message.

Signed-off-by: Zhang Qiang <[email protected]>
---
mm/dmapool.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/dmapool.c b/mm/dmapool.c
index f9fb9bbd733e..8f4dc53dde5b 100644
--- a/mm/dmapool.c
+++ b/mm/dmapool.c
@@ -285,7 +285,7 @@ void dma_pool_destroy(struct dma_pool *pool)
struct dma_page *page;
page = list_entry(pool->page_list.next,
struct dma_page, page_list);
- if (is_page_busy(page)) {
+ if (WARN_ON(is_page_busy(page))) {
if (pool->dev)
dev_err(pool->dev,
"dma_pool_destroy %s, %p busy\n",
--
2.26.2


2020-07-31 02:40:05

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] mm/dmapool.c: add WARN_ON() in dma_pool_destroy

On Fri, Jul 31, 2020 at 10:39:39AM +0800, [email protected] wrote:
> The pool is being destroyed, all page which in the pool,
> should be free. if some page is still be use by somebody,
> we should not just output error logs, also should also add
> a warning message.

There's already a warning message. What value does this actually have?

> Signed-off-by: Zhang Qiang <[email protected]>
> ---
> mm/dmapool.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/dmapool.c b/mm/dmapool.c
> index f9fb9bbd733e..8f4dc53dde5b 100644
> --- a/mm/dmapool.c
> +++ b/mm/dmapool.c
> @@ -285,7 +285,7 @@ void dma_pool_destroy(struct dma_pool *pool)
> struct dma_page *page;
> page = list_entry(pool->page_list.next,
> struct dma_page, page_list);
> - if (is_page_busy(page)) {
> + if (WARN_ON(is_page_busy(page))) {
> if (pool->dev)
> dev_err(pool->dev,
> "dma_pool_destroy %s, %p busy\n",
> --
> 2.26.2
>

2020-07-31 20:34:50

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] mm/dmapool.c: add WARN_ON() in dma_pool_destroy

On Fri, 31 Jul 2020 03:38:58 +0100 Matthew Wilcox <[email protected]> wrote:

> On Fri, Jul 31, 2020 at 10:39:39AM +0800, [email protected] wrote:
> > The pool is being destroyed, all page which in the pool,
> > should be free. if some page is still be use by somebody,
> > we should not just output error logs, also should also add
> > a warning message.
>
> There's already a warning message. What value does this actually have?

Presumably so we get a backtrace in order to identify the errant
caller.

I added a bit to the changelog:

: The pool is being destroyed so all pages which are in the pool should be
: free. If some page is still in use by somebody, we should not just output
: error logs, also should also add a WARN message so the stack backtrace may
: be used to identify the caller.


2020-07-31 20:52:46

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] mm/dmapool.c: add WARN_ON() in dma_pool_destroy

On Fri, Jul 31, 2020 at 01:32:15PM -0700, Andrew Morton wrote:
> On Fri, 31 Jul 2020 03:38:58 +0100 Matthew Wilcox <[email protected]> wrote:
>
> > On Fri, Jul 31, 2020 at 10:39:39AM +0800, [email protected] wrote:
> > > The pool is being destroyed, all page which in the pool,
> > > should be free. if some page is still be use by somebody,
> > > we should not just output error logs, also should also add
> > > a warning message.
> >
> > There's already a warning message. What value does this actually have?
>
> Presumably so we get a backtrace in order to identify the errant
> caller.

The existing message includes the name of the pool. We don't typically
have more than one place that destroys a pool.

What might be helpful would be something that said who allocated and
didn't free the object, but again, there's typically only one place which
allocates from any given pool, so even that would be all that helpful.

I'm not particularly impressed by these patches which don't actually
justify themselves.