Whamcloud - gitweb
LU-13253 libcfs: protect libcfs_debug_dumplog() 88/37588/3
authorAlex Zhuravlev <bzzz@whamcloud.com>
Sat, 15 Feb 2020 06:16:15 +0000 (09:16 +0300)
committerOleg Drokin <green@whamcloud.com>
Thu, 5 Mar 2020 22:36:47 +0000 (22:36 +0000)
as it uses global state to wait for dumping thread completion and
it doesn't make sense to dump concurrently.

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Ie6916a0bb53a0a3aa8992413811fe7a908f86276
Reviewed-on: https://review.whamcloud.com/37588
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
libcfs/libcfs/debug.c

index f48d9e5..8669dad 100644 (file)
@@ -400,11 +400,17 @@ static int libcfs_debug_dumplog_thread(void *arg)
        return 0;
 }
 
+static DEFINE_MUTEX(libcfs_debug_dumplog_lock);
+
 void libcfs_debug_dumplog(void)
 {
        struct task_struct *dumper;
 
        ENTRY;
+
+       if (mutex_trylock(&libcfs_debug_dumplog_lock) == 0)
+               return;
+
        /* If a previous call was interrupted, debug_complete->done
         * might be elevated, and so we won't actually wait here.
         * So we reinit the completion to ensure we wait for
@@ -420,6 +426,8 @@ void libcfs_debug_dumplog(void)
                       PTR_ERR(dumper));
        else
                wait_for_completion_interruptible(&debug_complete);
+
+       mutex_unlock(&libcfs_debug_dumplog_lock);
 }
 EXPORT_SYMBOL(libcfs_debug_dumplog);