Whamcloud - gitweb
LU-881 utils: running bumped w/o lock
authorBruce Korb <bruce_korb@xyratex.com>
Mon, 28 Nov 2011 20:02:21 +0000 (12:02 -0800)
committerOleg Drokin <green@whamcloud.com>
Wed, 7 Dec 2011 18:59:49 +0000 (13:59 -0500)
bumped_running accessed without lock

Multiple threads man increment shared_data->running until
the setting of bumped_running becomes visible.

Also, use "bool" -- First released in Issue 6 of POSIX spec:
   included for alignment with the ISO/IEC 9899:1999 standard

When inserting #include <stdbool.h>, it was noticed that stdio.h was
included twice.  Collected and ordered system headers so that
won't happen again.

Signed-off-by: Bruce Korb <bruce_korb@xyratex.com>
Change-Id: I45891e125221d29f72efee38580a56888c3a266f
Reviewed-on: http://review.whamcloud.com/1749
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: wangdi <di.wang@whamcloud.com>
lustre/utils/obd.c

index 2a84949..4f10404 100644 (file)
  * Author: Robert Read <rread@clusterfs.com>
  */
 
  * Author: Robert Read <rread@clusterfs.com>
  */
 
-#include <stdlib.h>
 #include <sys/ioctl.h>
 #include <sys/ioctl.h>
-#include <fcntl.h>
 #include <sys/socket.h>
 #include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
 #include <sys/types.h>
 #include <sys/types.h>
+#include <sys/un.h>
 #include <sys/wait.h>
 #include <sys/wait.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <signal.h>
+
 #include <ctype.h>
 #include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <glob.h>
 #include <glob.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
 
 #include "obdctl.h"
 
 #include <obd.h>          /* for struct lov_stripe_md */
 #include <lustre/lustre_build_version.h>
 
 
 #include "obdctl.h"
 
 #include <obd.h>          /* for struct lov_stripe_md */
 #include <lustre/lustre_build_version.h>
 
-#include <unistd.h>
-#include <sys/un.h>
-#include <time.h>
-#include <sys/time.h>
-#include <errno.h>
-#include <string.h>
-
 #include <obd_class.h>
 #include <lnet/lnetctl.h>
 #include <libcfs/libcfsutil.h>
 #include <obd_class.h>
 #include <lnet/lnetctl.h>
 #include <libcfs/libcfsutil.h>
-#include <stdio.h>
 #include <lustre/liblustreapi.h>
 
 #define MAX_STRING_SIZE 128
 #include <lustre/liblustreapi.h>
 
 #define MAX_STRING_SIZE 128
@@ -486,17 +486,18 @@ static inline void shmem_reset(int total_threads)
 
 static inline void shmem_bump(void)
 {
 
 static inline void shmem_bump(void)
 {
-        static int bumped_running;
+        static bool running_not_bumped = true;
 
         if (shared_data == NULL || thread <= 0 || thread > MAX_THREADS)
                 return;
 
         shmem_lock();
         shared_data->counters[thread - 1]++;
 
         if (shared_data == NULL || thread <= 0 || thread > MAX_THREADS)
                 return;
 
         shmem_lock();
         shared_data->counters[thread - 1]++;
-        if (!bumped_running)
+        if (running_not_bumped) {
                 shared_data->running++;
                 shared_data->running++;
+                running_not_bumped = false;
+        }
         shmem_unlock();
         shmem_unlock();
-        bumped_running = 1;
 }
 
 static void shmem_snap(int total_threads, int live_threads)
 }
 
 static void shmem_snap(int total_threads, int live_threads)