All of lore.kernel.org
 help / color / mirror / Atom feed
From: SJ Park <sj@kernel.org>
To: sashiko-bot@kernel.org
Cc: SJ Park <sj@kernel.org>, damon@lists.linux.dev
Subject: Re: [RFC PATCH 02/11] samples/damon/mtier: do not stop first context for damon_start() failure
Date: Sat,  4 Jul 2026 11:42:17 -0700	[thread overview]
Message-ID: <20260704184217.136391-1-sj@kernel.org> (raw)
In-Reply-To: <20260704182406.0C6AE1F000E9@smtp.kernel.org>

On Sat, 04 Jul 2026 18:24:05 +0000 sashiko-bot@kernel.org wrote:

> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] ABBA deadlock in damon_start() during error recovery when rolling back successfully started contexts.
> --
> 
> commit c411cd45182c74c483bd6bd5d58aea28123f720d
> Author: SJ Park <sj@kernel.org>
> 
> samples/damon/mtier: do not stop first context for damon_start() failure
> 
> damon_start() was able to fail while keeping the first context running.
> mtier hence stops the first context in the case. damon_start() is
> refactored to avoid that. The error handling is no longer necessary.
> Remove it.
> 
> > diff --git a/samples/damon/mtier.c b/samples/damon/mtier.c
> > index e567f4edd80ea..90881e8bd441f 100644
> > --- a/samples/damon/mtier.c
> > +++ b/samples/damon/mtier.c
> > @@ -193,8 +193,6 @@ static int damon_sample_mtier_start(void)
> >  	if (!err)
> >  		return 0;
> >  
> > -	if (damon_is_running(ctxs[0]))
> > -		damon_stop(ctxs, 1);
> 
> [Severity: High]
> Does the refactored error handling in damon_start() introduce a deadlock?
> 
> Since damon_start() is called with nr_ctxs = 2 here, if the first context
> starts successfully but the second one fails, the error recovery path in
> damon_start() could trigger an ABBA deadlock.
> 
> If damon_start() calls damon_stop() on the error path while holding
> damon_lock:
> 
> mm/damon/core.c:damon_start() {
>     ...
> 		err = __damon_start(ctxs[i]);
> 		if (err) {
> 			damon_stop(ctxs, i);
> 			break;
> 		}
>     ...
> }
> 
> damon_stop() blocks until the kdamond_fn() thread exits. However, kdamond_fn()
> attempts to acquire damon_lock at its exit path:
> 
> mm/damon/core.c:kdamond_fn() {
>     ...
> 	mutex_lock(&damon_lock);
> 	nr_running_ctxs--;
> 	if (!nr_running_ctxs && running_exclusive_ctxs)
> 		running_exclusive_ctxs = false;
> 	mutex_unlock(&damon_lock);
>     ...
> }
> 
> Could this cause kdamond_fn() to hang waiting for damon_lock, which is still
> held by damon_start(), resulting in a deadlock?

Yes, I will fix damon_start() it in the next revision.


Thanks,
SJ

[...]

  reply	other threads:[~2026-07-04 18:42 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-04 18:11 [RFC PATCH 00/11] mm/damon: refactor damon_{start,stop,commit}() for simple error handling SJ Park
2026-07-04 18:11 ` [RFC PATCH 01/11] mm/damon/core: stop ctxs in damon_start() before returning an error SJ Park
2026-07-04 18:20   ` sashiko-bot
2026-07-04 18:40     ` SJ Park
2026-07-04 18:11 ` [RFC PATCH 02/11] samples/damon/mtier: do not stop first context for damon_start() failure SJ Park
2026-07-04 18:24   ` sashiko-bot
2026-07-04 18:42     ` SJ Park [this message]
2026-07-04 18:11 ` [RFC PATCH 03/11] mm/damon/core: make damon_stop() never fails SJ Park
2026-07-04 18:30   ` sashiko-bot
2026-07-04 18:43     ` SJ Park
2026-07-04 18:11 ` [RFC PATCH 04/11] mm/damon/sysfs: ignore damon_stop() return value SJ Park
2026-07-04 18:11 ` [RFC PATCH 05/11] mm/damon/reclaaim: " SJ Park
2026-07-04 18:11 ` [RFC PATCH 06/11] mm/damon/lru_sort: " SJ Park
2026-07-04 18:11 ` [RFC PATCH 07/11] mm/damon/core: change damon_stop() return type to void SJ Park
2026-07-04 18:23   ` sashiko-bot
2026-07-04 19:36     ` SJ Park
2026-07-04 18:11 ` [RFC PATCH 08/11] samples/damon/mtier: stop all contexts with single damon_stop() call SJ Park
2026-07-04 18:20   ` sashiko-bot
2026-07-04 19:37     ` SJ Park
2026-07-04 18:11 ` [RFC PATCH 09/11] mm/damon/core: stop ctx in damon_call() before reruning an error SJ Park
2026-07-04 18:25   ` sashiko-bot
2026-07-04 19:34     ` SJ Park
2026-07-04 19:47       ` SJ Park
2026-07-04 18:11 ` [RFC PATCH 10/11] samples/damon/wsse: do not stop ctx for damon_call() failure SJ Park
2026-07-04 18:31   ` sashiko-bot
2026-07-04 19:38     ` SJ Park
2026-07-04 18:11 ` [RFC PATCH 11/11] samples/damon/prcl: do not stop DAMON " SJ Park

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260704184217.136391-1-sj@kernel.org \
    --to=sj@kernel.org \
    --cc=damon@lists.linux.dev \
    --cc=sashiko-bot@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.