diff mbox series

mm/dmapool.c: add WARN_ON() in dma_pool_destroy

Message ID 20200731023939.19206-1-qiang.zhang@windriver.com (mailing list archive)
State New, archived
Headers show
Series mm/dmapool.c: add WARN_ON() in dma_pool_destroy | expand

Commit Message

Zhang, Qiang July 31, 2020, 2:39 a.m. UTC
From: Zhang Qiang <qiang.zhang@windriver.com>

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 <qiang.zhang@windriver.com>
---
 mm/dmapool.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Matthew Wilcox (Oracle) July 31, 2020, 2:38 a.m. UTC | #1
On Fri, Jul 31, 2020 at 10:39:39AM +0800, qiang.zhang@windriver.com 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 <qiang.zhang@windriver.com>
> ---
>  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
>
Andrew Morton July 31, 2020, 8:32 p.m. UTC | #2
On Fri, 31 Jul 2020 03:38:58 +0100 Matthew Wilcox <willy@infradead.org> wrote:

> On Fri, Jul 31, 2020 at 10:39:39AM +0800, qiang.zhang@windriver.com 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.
Matthew Wilcox (Oracle) July 31, 2020, 8:49 p.m. UTC | #3
On Fri, Jul 31, 2020 at 01:32:15PM -0700, Andrew Morton wrote:
> On Fri, 31 Jul 2020 03:38:58 +0100 Matthew Wilcox <willy@infradead.org> wrote:
> 
> > On Fri, Jul 31, 2020 at 10:39:39AM +0800, qiang.zhang@windriver.com 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.
diff mbox series

Patch

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",