linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: James Simmons <jsimmons@infradead.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	devel@driverdev.osuosl.org, Oleg Drokin <oleg.drokin@intel.com>,
	Andreas Dilger <andreas.dilger@intel.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	lustre-devel@lists.lustre.org, Fan Yong <fan.yong@intel.com>
Subject: [PATCH 08/10] staging: lustre: race condition for check/use cfs_fail_val
Date: Wed,  4 Nov 2015 13:40:04 -0500	[thread overview]
Message-ID: <1446662406-4590-8-git-send-email-jsimmons@infradead.org> (raw)
In-Reply-To: <1446662406-4590-1-git-send-email-jsimmons@infradead.org>

From: Fan Yong <fan.yong@intel.com>

There are some race conditions when check/use cfs_fail_val.
For example: when inject failure stub for LFSCK test as following:

764   if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_DELAY2) &&
765       cfs_fail_val > 0) {
766           struct l_wait_info lwi;
767
768           lwi = LWI_TIMEOUT(cfs_time_seconds(cfs_fail_val),
769                             NULL, NULL);
770           l_wait_event(thread->t_ctl_waitq,
771                        !thread_is_running(thread),
772                        &lwi);
773
774           if (unlikely(!thread_is_running(thread))) {
775                   CDEBUG(D_LFSCK, "%s: scan dir exit for engine "
776                          "stop, parent "DFID", cookie "LPX64"n",
777                          lfsck_lfsck2name(lfsck),
778                          PFID(lfsck_dto2fid(dir)),
779                          lfsck->li_cookie_dir);
780                   RETURN(0);
781           }
782   }

The "cfs_fail_val" may be changed as zero by others after the check
at the line 765 but before using it at the line 768. Then the LFSCK
engine will fall into "wait" until someone run "lfsck_stop".

Signed-off-by: Fan Yong <fan.yong@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6146
Reviewed-on: http://review.whamcloud.com/13481
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
---
 drivers/staging/lustre/lustre/libcfs/fail.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/lustre/lustre/libcfs/fail.c b/drivers/staging/lustre/lustre/libcfs/fail.c
index d39fece..ea059b0 100644
--- a/drivers/staging/lustre/lustre/libcfs/fail.c
+++ b/drivers/staging/lustre/lustre/libcfs/fail.c
@@ -126,7 +126,7 @@ int __cfs_fail_timeout_set(__u32 id, __u32 value, int ms, int set)
 	int ret;
 
 	ret = __cfs_fail_check_set(id, value, set);
-	if (ret) {
+	if (ret && likely(ms > 0)) {
 		CERROR("cfs_fail_timeout id %x sleeping for %dms\n",
 		       id, ms);
 		set_current_state(TASK_UNINTERRUPTIBLE);
-- 
1.7.1


  parent reply	other threads:[~2015-11-04 18:41 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-04 18:39 [PATCH 01/10] staging: lustre: wrong parameter to cfs_hash_keycpy James Simmons
2015-11-04 18:39 ` [PATCH 02/10] staging: lustre: remove unnecessary EXPORT_SYMBOL in libcfs James Simmons
2015-11-04 18:39 ` [PATCH 03/10] staging: lustre: remove libcfs_debug_set_level prototype from libcfs_private.h James Simmons
2015-11-04 18:40 ` [PATCH 04/10] staging: lustre: fix buffer overflow of string buffer James Simmons
2015-11-04 18:40 ` [PATCH 05/10] staging: lustre: Fix possible NULL pointer dereference in lprocfs_status.c James Simmons
2015-11-04 18:40 ` [PATCH 06/10] staging: lustre: Update module author to OpenSFS James Simmons
2015-11-04 18:40 ` [PATCH 07/10] staging: lustre: Handle nodemask on UMP machines James Simmons
2015-11-04 22:06   ` kbuild test robot
2015-11-05  0:46   ` kbuild test robot
2015-11-06 22:18     ` [lustre-devel] " Simmons, James A.
2015-11-07  1:12       ` Greg Kroah-Hartman
2015-11-07 20:53       ` Dan Carpenter
2015-11-04 18:40 ` James Simmons [this message]
2015-11-04 18:40 ` [PATCH 09/10] staging: lustre: remove page_collection::pc_lock in libcfs James Simmons
2015-11-04 18:40 ` [PATCH 10/10] staging: lustre: fix 'error handling' issues for libcfs workitem.c James Simmons

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=1446662406-4590-8-git-send-email-jsimmons@infradead.org \
    --to=jsimmons@infradead.org \
    --cc=andreas.dilger@intel.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=fan.yong@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lustre-devel@lists.lustre.org \
    --cc=oleg.drokin@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).