Whamcloud - gitweb
LU-2744 build: fix 'data race condition' issues
[fs/lustre-release.git] / lustre / include / lustre_import.h
index f32c9ef..acb82fd 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, Whamcloud, Inc.
+ * Copyright (c) 2011, 2013, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
 #define AT_FLG_NOHIST 0x1          /* use last reported value only */
 
 struct adaptive_timeout {
-        time_t           at_binstart;         /* bin start time */
-        unsigned int     at_hist[AT_BINS];    /* timeout history bins */
-        unsigned int     at_flags;
-        unsigned int     at_current;          /* current timeout value */
-        unsigned int     at_worst_ever;       /* worst-ever timeout value */
-        time_t           at_worst_time;       /* worst-ever timeout timestamp */
-        cfs_spinlock_t   at_lock;
+       time_t          at_binstart;         /* bin start time */
+       unsigned int    at_hist[AT_BINS];    /* timeout history bins */
+       unsigned int    at_flags;
+       unsigned int    at_current;          /* current timeout value */
+       unsigned int    at_worst_ever;       /* worst-ever timeout value */
+       time_t          at_worst_time;       /* worst-ever timeout timestamp */
+       spinlock_t      at_lock;
 };
 
 struct ptlrpc_at_array {
@@ -188,7 +188,7 @@ struct obd_import {
          * @{
          */
         struct ptlrpc_sec        *imp_sec;
-        cfs_mutex_t               imp_sec_mutex;
+       struct mutex              imp_sec_mutex;
         cfs_time_t                imp_sec_expire;
         /** @} */
 
@@ -248,23 +248,43 @@ struct obd_import {
         struct obd_import_conn   *imp_conn_current;
 
         /** Protects flags, level, generation, conn_cnt, *_list */
-        cfs_spinlock_t            imp_lock;
-
-        /* flags */
-        unsigned long             imp_no_timeout:1,       /* timeouts are disabled */
-                                  imp_invalid:1,          /* evicted */
-                                  imp_deactive:1,         /* administratively disabled */
-                                  imp_replayable:1,       /* try to recover the import */
-                                  imp_dlm_fake:1,         /* don't run recovery (timeout instead) */
-                                  imp_server_timeout:1,   /* use 1/2 timeout on MDS' OSCs */
-                                  imp_delayed_recovery:1, /* VBR: imp in delayed recovery */
-                                  imp_no_lock_replay:1,   /* VBR: if gap was found then no lock replays */
-                                  imp_vbr_failed:1,       /* recovery by versions was failed */
-                                  imp_force_verify:1,     /* force an immidiate ping */
-                                  imp_pingable:1,         /* pingable */
-                                  imp_resend_replay:1,    /* resend for replay */
-                                  imp_no_pinger_recover:1,/* disable normal recovery, for test only. */
-                                  imp_force_reconnect:1;  /* import must be reconnected instead of chouse new connection */
+       spinlock_t                imp_lock;
+
+       /* flags */
+       unsigned long             imp_no_timeout:1, /* timeouts are disabled */
+                                 imp_invalid:1,    /* evicted */
+                                 /* administratively disabled */
+                                 imp_deactive:1,
+                                 /* try to recover the import */
+                                 imp_replayable:1,
+                                 /* don't run recovery (timeout instead) */
+                                 imp_dlm_fake:1,
+                                 /* use 1/2 timeout on MDS' OSCs */
+                                 imp_server_timeout:1,
+                                 /* VBR: imp in delayed recovery */
+                                 imp_delayed_recovery:1,
+                                 /* VBR: if gap was found then no lock replays
+                                  */
+                                 imp_no_lock_replay:1,
+                                 /* recovery by versions was failed */
+                                 imp_vbr_failed:1,
+                                 /* force an immidiate ping */
+                                 imp_force_verify:1,
+                                 /* force a scheduled ping */
+                                 imp_force_next_verify:1,
+                                 /* pingable */
+                                 imp_pingable:1,
+                                 /* resend for replay */
+                                 imp_resend_replay:1,
+                                 /* disable normal recovery, for test only. */
+                                 imp_no_pinger_recover:1,
+                                 /* need IR MNE swab */
+                                 imp_need_mne_swab:1,
+                                 /* import must be reconnected instead of
+                                  * chouse new connection */
+                                 imp_force_reconnect:1,
+                                 /* import has tried to connect with server */
+                                 imp_connect_tried:1;
         __u32                     imp_connect_op;
         struct obd_connect_data   imp_connect_data;
         __u64                     imp_connect_flags_orig;
@@ -316,13 +336,15 @@ static inline unsigned int at_timeout2est(unsigned int val)
 }
 
 static inline void at_reset(struct adaptive_timeout *at, int val) {
+       spin_lock(&at->at_lock);
         at->at_current = val;
         at->at_worst_ever = val;
         at->at_worst_time = cfs_time_current_sec();
+       spin_unlock(&at->at_lock);
 }
 static inline void at_init(struct adaptive_timeout *at, int val, int flags) {
        memset(at, 0, sizeof(*at));
-       cfs_spin_lock_init(&at->at_lock);
+       spin_lock_init(&at->at_lock);
        at->at_flags = flags;
        at_reset(at, val);
 }