From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Davidlohr Bueso <dave@stgolabs.net>
Cc: peterz@infradead.org, mingo@kernel.org,
linux-kernel@vger.kernel.org, Davidlohr Bueso <dbueso@suse.de>
Subject: Re: [PATCH 6/9] torture: Address race in module cleanup
Date: Fri, 12 Sep 2014 11:04:07 -0700 [thread overview]
Message-ID: <20140912180407.GF4775@linux.vnet.ibm.com> (raw)
In-Reply-To: <1410493224-3312-7-git-send-email-dave@stgolabs.net>
On Thu, Sep 11, 2014 at 08:40:21PM -0700, Davidlohr Bueso wrote:
> When performing module cleanups by calling torture_cleanup() the
> 'torture_type' string in nullified However, callers are not necessarily
> done, and might still need to reference the variable. This impacts
> both rcutorture and locktorture, causing printing things like:
>
> [ 94.226618] (null)-torture: Stopping lock_torture_writer task
> [ 94.226624] (null)-torture: Stopping lock_torture_stats task
>
> Thus delay this operation until the very end of the cleanup process.
> The consequence (which shouldn't matter for this kid of program) is,
> of course, that we delay the window between rmmod and modprobing,
> for instance in module_torture_begin().
>
> Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Good catch! I had just been ignoring the (null), and my scripting
doesn't care, but it is better to have it taken care of.
Thanx, Paul
> ---
> include/linux/torture.h | 3 ++-
> kernel/locking/locktorture.c | 3 ++-
> kernel/rcu/rcutorture.c | 3 ++-
> kernel/torture.c | 16 +++++++++++++---
> 4 files changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/torture.h b/include/linux/torture.h
> index 5ca58fc..301b628 100644
> --- a/include/linux/torture.h
> +++ b/include/linux/torture.h
> @@ -77,7 +77,8 @@ int torture_stutter_init(int s);
> /* Initialization and cleanup. */
> bool torture_init_begin(char *ttype, bool v, int *runnable);
> void torture_init_end(void);
> -bool torture_cleanup(void);
> +bool torture_cleanup_begin(void);
> +void torture_cleanup_end(void);
> bool torture_must_stop(void);
> bool torture_must_stop_irq(void);
> void torture_kthread_stopping(char *title);
> diff --git a/kernel/locking/locktorture.c b/kernel/locking/locktorture.c
> index de703a7..988267c 100644
> --- a/kernel/locking/locktorture.c
> +++ b/kernel/locking/locktorture.c
> @@ -361,7 +361,7 @@ static void lock_torture_cleanup(void)
> {
> int i;
>
> - if (torture_cleanup())
> + if (torture_cleanup_begin())
> return;
>
> if (writer_tasks) {
> @@ -384,6 +384,7 @@ static void lock_torture_cleanup(void)
> else
> lock_torture_print_module_parms(cur_ops,
> "End of test: SUCCESS");
> + torture_cleanup_end();
> }
>
> static int __init lock_torture_init(void)
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index 948a769..57a2792 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1418,7 +1418,7 @@ rcu_torture_cleanup(void)
> int i;
>
> rcutorture_record_test_transition();
> - if (torture_cleanup()) {
> + if (torture_cleanup_begin()) {
> if (cur_ops->cb_barrier != NULL)
> cur_ops->cb_barrier();
> return;
> @@ -1468,6 +1468,7 @@ rcu_torture_cleanup(void)
> "End of test: RCU_HOTPLUG");
> else
> rcu_torture_print_module_parms(cur_ops, "End of test: SUCCESS");
> + torture_cleanup_end();
> }
>
> #ifdef CONFIG_DEBUG_OBJECTS_RCU_HEAD
> diff --git a/kernel/torture.c b/kernel/torture.c
> index d600af2..07a5c3d 100644
> --- a/kernel/torture.c
> +++ b/kernel/torture.c
> @@ -635,8 +635,13 @@ EXPORT_SYMBOL_GPL(torture_init_end);
> *
> * This must be called before the caller starts shutting down its own
> * kthreads.
> + *
> + * Both torture_cleanup_begin() and torture_cleanup_end() must be paired,
> + * in order to correctly perform the cleanup. They are separated because
> + * threads can still need to reference the torture_type type, thus nullify
> + * only after completing all other relevant calls.
> */
> -bool torture_cleanup(void)
> +bool torture_cleanup_begin(void)
> {
> mutex_lock(&fullstop_mutex);
> if (ACCESS_ONCE(fullstop) == FULLSTOP_SHUTDOWN) {
> @@ -651,12 +656,17 @@ bool torture_cleanup(void)
> torture_shuffle_cleanup();
> torture_stutter_cleanup();
> torture_onoff_cleanup();
> + return false;
> +}
> +EXPORT_SYMBOL_GPL(torture_cleanup_begin);
> +
> +void torture_cleanup_end(void)
> +{
> mutex_lock(&fullstop_mutex);
> torture_type = NULL;
> mutex_unlock(&fullstop_mutex);
> - return false;
> }
> -EXPORT_SYMBOL_GPL(torture_cleanup);
> +EXPORT_SYMBOL_GPL(torture_cleanup_end);
>
> /*
> * Is it time for the current torture test to stop?
> --
> 1.8.4.5
>
next prev parent reply other threads:[~2014-09-12 18:04 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-12 3:40 [PATCH -tip 0/9] locktorture: Improve and expand lock torturing Davidlohr Bueso
2014-09-12 3:40 ` [PATCH 1/9] locktorture: Rename locktorture_runnable parameter Davidlohr Bueso
2014-09-12 17:40 ` Paul E. McKenney
2014-09-12 17:51 ` Paul E. McKenney
2014-09-12 3:40 ` [PATCH 2/9] locktorture: Add documentation Davidlohr Bueso
2014-09-12 5:28 ` Davidlohr Bueso
2014-09-13 1:10 ` Randy Dunlap
2014-09-16 19:35 ` Paul E. McKenney
2014-09-12 3:40 ` [PATCH 3/9] locktorture: Support mutexes Davidlohr Bueso
2014-09-12 18:02 ` Paul E. McKenney
2014-09-12 18:56 ` Davidlohr Bueso
2014-09-12 19:12 ` Paul E. McKenney
2014-09-13 2:13 ` Davidlohr Bueso
2014-09-12 3:40 ` [PATCH 4/9] locktorture: Teach about lock debugging Davidlohr Bueso
2014-09-12 3:40 ` [PATCH 5/9] locktorture: Make statistics generic Davidlohr Bueso
2014-09-12 3:40 ` [PATCH 6/9] torture: Address race in module cleanup Davidlohr Bueso
2014-09-12 18:04 ` Paul E. McKenney [this message]
2014-09-12 18:28 ` Davidlohr Bueso
2014-09-12 19:03 ` Paul E. McKenney
2014-09-12 4:40 ` [PATCH 7/9] locktorture: Add infrastructure for torturing read locks Davidlohr Bueso
2014-09-12 16:06 ` Paul E. McKenney
2014-09-12 18:02 ` Davidlohr Bueso
2014-09-12 4:41 ` [PATCH 8/9] locktorture: Support rwsems Davidlohr Bueso
2014-09-12 7:37 ` Peter Zijlstra
2014-09-12 14:49 ` Davidlohr Bueso
2014-09-12 18:07 ` Paul E. McKenney
2014-09-12 4:42 ` [PATCH 9/9] locktorture: Introduce torture context Davidlohr Bueso
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=20140912180407.GF4775@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=dave@stgolabs.net \
--cc=dbueso@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.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.