<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>
GitLab
</title>

</head>
<body>
<style type="text/css">
img {
max-width: 100%; height: auto;
}
</style>
<div class="content">
<h3>
Philip Carns pushed to branch dev-stdio
at <a href="https://xgitlab.cels.anl.gov/darshan/darshan">darshan / darshan</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/af624bef45196e97f98b52b24f8832d12bbd9e91">af624bef</a></strong>
<div>
<span>by Phil Carns</span>
<i>at 2016-05-01T10:39:58-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap">misc code cleanups and notes</pre>
</li>
</ul>
<h4>2 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#620f2ecad2bb6f74b2fcd0134963a841" style="text-decoration: none">
darshan-runtime/lib/darshan-posix.c
</a>
</li>
<li class="file-stats">
<a href="#ad29afc395839758d41094872298bd0d" style="text-decoration: none">
darshan-runtime/lib/darshan-stdio.c
</a>
</li>
</ul>
<h4>Changes:</h4>
<li id="620f2ecad2bb6f74b2fcd0134963a841">
<a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/af624bef45196e97f98b52b24f8832d12bbd9e91#diff-0">
<strong>
darshan-runtime/lib/darshan-posix.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/darshan-runtime/lib/darshan-posix.c
</span><span style="background: #ddffdd; color: #000000">+++ b/darshan-runtime/lib/darshan-posix.c
</span><span style="color: #aaaaaa">@@ -198,7 +198,7 @@ static void posix_shutdown(void);
</span> #define POSIX_LOCK() pthread_mutex_lock(&posix_runtime_mutex)
 #define POSIX_UNLOCK() pthread_mutex_unlock(&posix_runtime_mutex)
 
<span style="background: #ffdddd; color: #000000">-#define POSIX_RECORD_OPEN(__ret, __path, __mode, __stream_flag, __tm1, __tm2) do { \
</span><span style="background: #ddffdd; color: #000000">+#define POSIX_RECORD_OPEN(__ret, __path, __mode, __tm1, __tm2) do { \
</span>     struct posix_file_runtime* file; \
     char* exclude; \
     int tmp_index = 0; \
<span style="color: #aaaaaa">@@ -216,17 +216,14 @@ static void posix_shutdown(void);
</span>     file->offset = 0; \
     file->last_byte_written = 0; \
     file->last_byte_read = 0; \
<span style="background: #ffdddd; color: #000000">-    if(__stream_flag)\
-        file->file_record->counters[POSIX_FOPENS] += 1; \
-    else \
-        file->file_record->counters[POSIX_OPENS] += 1; \
</span><span style="background: #ddffdd; color: #000000">+    file->file_record->counters[POSIX_OPENS] += 1; \
</span>     if(file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] == 0 || \
      file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] > __tm1) \
         file->file_record->fcounters[POSIX_F_OPEN_TIMESTAMP] = __tm1; \
     DARSHAN_TIMER_INC_NO_OVERLAP(file->file_record->fcounters[POSIX_F_META_TIME], __tm1, __tm2, file->last_meta_end); \
 } while(0)
 
<span style="background: #ffdddd; color: #000000">-#define POSIX_RECORD_READ(__ret, __fd, __pread_flag, __pread_offset, __aligned, __stream_flag, __tm1, __tm2) do{ \
</span><span style="background: #ddffdd; color: #000000">+#define POSIX_RECORD_READ(__ret, __fd, __pread_flag, __pread_offset, __aligned, __tm1, __tm2) do{ \
</span>     size_t stride; \
     int64_t this_offset; \
     struct posix_file_runtime* file; \
<span style="color: #aaaaaa">@@ -253,10 +250,7 @@ static void posix_shutdown(void);
</span>     if(file->file_record->counters[POSIX_MAX_BYTE_READ] < (this_offset + __ret - 1)) \
         file->file_record->counters[POSIX_MAX_BYTE_READ] = (this_offset + __ret - 1); \
     file->file_record->counters[POSIX_BYTES_READ] += __ret; \
<span style="background: #ffdddd; color: #000000">-    if(__stream_flag) \
-        file->file_record->counters[POSIX_FREADS] += 1; \
-    else \
-        file->file_record->counters[POSIX_READS] += 1; \
</span><span style="background: #ddffdd; color: #000000">+    file->file_record->counters[POSIX_READS] += 1; \
</span>     DARSHAN_BUCKET_INC(&(file->file_record->counters[POSIX_SIZE_READ_0_100]), __ret); \
     darshan_common_val_counter(&file->access_root, &file->access_count, __ret); \
     darshan_common_val_counter(&file->stride_root, &file->stride_count, stride); \
<span style="color: #aaaaaa">@@ -278,7 +272,7 @@ static void posix_shutdown(void);
</span>     DARSHAN_TIMER_INC_NO_OVERLAP(file->file_record->fcounters[POSIX_F_READ_TIME], __tm1, __tm2, file->last_read_end); \
 } while(0)
 
<span style="background: #ffdddd; color: #000000">-#define POSIX_RECORD_WRITE(__ret, __fd, __pwrite_flag, __pwrite_offset, __aligned, __stream_flag, __tm1, __tm2) do{ \
</span><span style="background: #ddffdd; color: #000000">+#define POSIX_RECORD_WRITE(__ret, __fd, __pwrite_flag, __pwrite_offset, __aligned, __tm1, __tm2) do{ \
</span>     size_t stride; \
     int64_t this_offset; \
     struct posix_file_runtime* file; \
<span style="color: #aaaaaa">@@ -305,10 +299,7 @@ static void posix_shutdown(void);
</span>     if(file->file_record->counters[POSIX_MAX_BYTE_WRITTEN] < (this_offset + __ret - 1)) \
         file->file_record->counters[POSIX_MAX_BYTE_WRITTEN] = (this_offset + __ret - 1); \
     file->file_record->counters[POSIX_BYTES_WRITTEN] += __ret; \
<span style="background: #ffdddd; color: #000000">-    if(__stream_flag) \
-        file->file_record->counters[POSIX_FWRITES] += 1; \
-    else \
-        file->file_record->counters[POSIX_WRITES] += 1; \
</span><span style="background: #ddffdd; color: #000000">+    file->file_record->counters[POSIX_WRITES] += 1; \
</span>     DARSHAN_BUCKET_INC(&(file->file_record->counters[POSIX_SIZE_WRITE_0_100]), __ret); \
     darshan_common_val_counter(&file->access_root, &file->access_count, __ret); \
     darshan_common_val_counter(&file->stride_root, &file->stride_count, stride); \
<span style="color: #aaaaaa">@@ -384,7 +375,7 @@ int DARSHAN_DECL(open)(const char *path, int flags, ...)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, path, mode, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -418,7 +409,7 @@ int DARSHAN_DECL(open64)(const char *path, int flags, ...)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, path, mode, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -437,7 +428,7 @@ int DARSHAN_DECL(creat)(const char* path, mode_t mode)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, path, mode, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -456,7 +447,7 @@ int DARSHAN_DECL(creat64)(const char* path, mode_t mode)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, path, mode, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, path, mode, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -475,7 +466,7 @@ int DARSHAN_DECL(mkstemp)(char* template)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, template, 0, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -494,7 +485,7 @@ int DARSHAN_DECL(mkostemp)(char* template, int flags)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, template, 0, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -513,7 +504,7 @@ int DARSHAN_DECL(mkstemps)(char* template, int suffixlen)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, template, 0, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -532,7 +523,7 @@ int DARSHAN_DECL(mkostemps)(char* template, int suffixlen, int flags)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_OPEN(ret, template, 0, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_OPEN(ret, template, 0, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -554,7 +545,7 @@ ssize_t DARSHAN_DECL(read)(int fd, void *buf, size_t count)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_READ(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_READ(ret, fd, 0, 0, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -576,7 +567,7 @@ ssize_t DARSHAN_DECL(write)(int fd, const void *buf, size_t count)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_WRITE(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_WRITE(ret, fd, 0, 0, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -598,7 +589,7 @@ ssize_t DARSHAN_DECL(pread)(int fd, void *buf, size_t count, off_t offset)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_READ(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_READ(ret, fd, 1, offset, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -620,7 +611,7 @@ ssize_t DARSHAN_DECL(pwrite)(int fd, const void *buf, size_t count, off_t offset
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_WRITE(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_WRITE(ret, fd, 1, offset, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -642,7 +633,7 @@ ssize_t DARSHAN_DECL(pread64)(int fd, void *buf, size_t count, off64_t offset)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_READ(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_READ(ret, fd, 1, offset, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -664,7 +655,7 @@ ssize_t DARSHAN_DECL(pwrite64)(int fd, const void *buf, size_t count, off64_t of
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_WRITE(ret, fd, 1, offset, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_WRITE(ret, fd, 1, offset, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -691,7 +682,7 @@ ssize_t DARSHAN_DECL(readv)(int fd, const struct iovec *iov, int iovcnt)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_READ(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_READ(ret, fd, 0, 0, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -718,7 +709,7 @@ ssize_t DARSHAN_DECL(writev)(int fd, const struct iovec *iov, int iovcnt)
</span> 
     POSIX_LOCK();
     posix_runtime_initialize();
<span style="background: #ffdddd; color: #000000">-    POSIX_RECORD_WRITE(ret, fd, 0, 0, aligned_flag, 0, tm1, tm2);
</span><span style="background: #ddffdd; color: #000000">+    POSIX_RECORD_WRITE(ret, fd, 0, 0, aligned_flag, tm1, tm2);
</span>     POSIX_UNLOCK();
 
     return(ret);
<span style="color: #aaaaaa">@@ -1161,13 +1152,13 @@ ssize_t DARSHAN_DECL(aio_return)(struct aiocb *aiocbp)
</span>         if(aiocbp->aio_lio_opcode == LIO_WRITE)
         {
             POSIX_RECORD_WRITE(ret, aiocbp->aio_fildes,
<span style="background: #ffdddd; color: #000000">-                1, aiocbp->aio_offset, aligned_flag, 0,
</span><span style="background: #ddffdd; color: #000000">+                1, aiocbp->aio_offset, aligned_flag,
</span>                 tmp->tm1, tm2);
         }
         else if(aiocbp->aio_lio_opcode == LIO_READ)
         {
             POSIX_RECORD_READ(ret, aiocbp->aio_fildes,
<span style="background: #ffdddd; color: #000000">-                1, aiocbp->aio_offset, aligned_flag, 0,
</span><span style="background: #ddffdd; color: #000000">+                1, aiocbp->aio_offset, aligned_flag,
</span>                 tmp->tm1, tm2);
         }
         free(tmp);
<span style="color: #aaaaaa">@@ -1199,13 +1190,13 @@ ssize_t DARSHAN_DECL(aio_return64)(struct aiocb64 *aiocbp)
</span>         if(aiocbp->aio_lio_opcode == LIO_WRITE)
         {
             POSIX_RECORD_WRITE(ret, aiocbp->aio_fildes,
<span style="background: #ffdddd; color: #000000">-                1, aiocbp->aio_offset, aligned_flag, 0,
</span><span style="background: #ddffdd; color: #000000">+                1, aiocbp->aio_offset, aligned_flag,
</span>                 tmp->tm1, tm2);
         }
         else if(aiocbp->aio_lio_opcode == LIO_READ)
         {
             POSIX_RECORD_READ(ret, aiocbp->aio_fildes,
<span style="background: #ffdddd; color: #000000">-                1, aiocbp->aio_offset, aligned_flag, 0,
</span><span style="background: #ddffdd; color: #000000">+                1, aiocbp->aio_offset, aligned_flag,
</span>                 tmp->tm1, tm2);
         }
         free(tmp);
<span style="color: #aaaaaa">@@ -1867,15 +1858,15 @@ void darshan_posix_shutdown_bench_setup(int test_case)
</span>         case 1: /* single file-per-process */
             snprintf(filepath, 256, "fpp-0_rank-%d", my_rank);
             
<span style="background: #ffdddd; color: #000000">-            POSIX_RECORD_OPEN(fd_array[0], filepath, 777, 0, 0, 1);
-            POSIX_RECORD_WRITE(size_array[0], fd_array[0], 0, 0, 1, 0, 1, 2);
</span><span style="background: #ddffdd; color: #000000">+            POSIX_RECORD_OPEN(fd_array[0], filepath, 777, 0, 1);
+            POSIX_RECORD_WRITE(size_array[0], fd_array[0], 0, 0, 1, 1, 2);
</span> 
             break;
         case 2: /* single shared file */
             snprintf(filepath, 256, "shared-0");
 
<span style="background: #ffdddd; color: #000000">-            POSIX_RECORD_OPEN(fd_array[0], filepath, 777, 0, 0, 1);
-            POSIX_RECORD_WRITE(size_array[0], fd_array[0], 0, 0, 1, 0, 1, 2);
</span><span style="background: #ddffdd; color: #000000">+            POSIX_RECORD_OPEN(fd_array[0], filepath, 777, 0, 1);
+            POSIX_RECORD_WRITE(size_array[0], fd_array[0], 0, 0, 1, 1, 2);
</span> 
             break;
         case 3: /* 1024 unique files per proc */
<span style="color: #aaaaaa">@@ -1883,9 +1874,9 @@ void darshan_posix_shutdown_bench_setup(int test_case)
</span>             {
                 snprintf(filepath, 256, "fpp-%d_rank-%d", i , my_rank);
 
<span style="background: #ffdddd; color: #000000">-                POSIX_RECORD_OPEN(fd_array[i], filepath, 777, 0, 0, 1);
</span><span style="background: #ddffdd; color: #000000">+                POSIX_RECORD_OPEN(fd_array[i], filepath, 777, 0, 1);
</span>                 POSIX_RECORD_WRITE(size_array[i % DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT],
<span style="background: #ffdddd; color: #000000">-                    fd_array[i], 0, 0, 1, 0, 1, 2);
</span><span style="background: #ddffdd; color: #000000">+                    fd_array[i], 0, 0, 1, 1, 2);
</span>             }
 
             break;
<span style="color: #aaaaaa">@@ -1894,9 +1885,9 @@ void darshan_posix_shutdown_bench_setup(int test_case)
</span>             {
                 snprintf(filepath, 256, "shared-%d", i);
 
<span style="background: #ffdddd; color: #000000">-                POSIX_RECORD_OPEN(fd_array[i], filepath, 777, 0, 0, 1);
</span><span style="background: #ddffdd; color: #000000">+                POSIX_RECORD_OPEN(fd_array[i], filepath, 777, 0, 1);
</span>                 POSIX_RECORD_WRITE(size_array[i % DARSHAN_COMMON_VAL_MAX_RUNTIME_COUNT],
<span style="background: #ffdddd; color: #000000">-                    fd_array[i], 0, 0, 1, 0, 1, 2);
</span><span style="background: #ddffdd; color: #000000">+                    fd_array[i], 0, 0, 1, 1, 2);
</span>             }
 
             break;
</code></pre>

<br>
</li>
<li id="ad29afc395839758d41094872298bd0d">
<a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/af624bef45196e97f98b52b24f8832d12bbd9e91#diff-1">
<strong>
darshan-runtime/lib/darshan-stdio.c
</strong>
</a>
<hr>
<pre class="highlight"><code><span style="background: #ffdddd; color: #000000">--- a/darshan-runtime/lib/darshan-stdio.c
</span><span style="background: #ddffdd; color: #000000">+++ b/darshan-runtime/lib/darshan-stdio.c
</span><span style="color: #aaaaaa">@@ -4,6 +4,14 @@
</span>  *
  */
 
<span style="background: #ddffdd; color: #000000">+/* TODO list (general) for this module:
+ * - finish remaining function wrappers, see log format header
+ * - implement reduction operator
+ * - add stdio page to darshan-job-summary
+ * - figure out what to do about posix module compatibility
+ *   - remove stdio counters in POSIX or keep and set to -1?
+ */
+
</span> #define _XOPEN_SOURCE 500
 #define _GNU_SOURCE
 
<span style="color: #aaaaaa">@@ -63,10 +71,8 @@ DARSHAN_FORWARD_DECL(fseek, int, (FILE *stream, long offset, int whence));
</span>  */
 struct stdio_file_runtime
 {
<span style="background: #ffdddd; color: #000000">-    /* TODO: make sure we need/want all of these fields */
</span>     struct darshan_stdio_record* file_record;
     int64_t offset;
<span style="background: #ffdddd; color: #000000">-    enum darshan_io_type last_io_type;
</span>     double last_meta_end;
     double last_read_end;
     double last_write_end;
<span style="color: #aaaaaa">@@ -137,8 +143,6 @@ static void stdio_shutdown(void);
</span> #define STDIO_LOCK() pthread_mutex_lock(&stdio_runtime_mutex)
 #define STDIO_UNLOCK() pthread_mutex_unlock(&stdio_runtime_mutex)
 
<span style="background: #ffdddd; color: #000000">-/* TODO: remember to clean up stream_flag in posix module */
-
</span> #define STDIO_RECORD_OPEN(__ret, __path, __tm1, __tm2) do { \
     struct stdio_file_runtime* file; \
     char* exclude; \
<span style="color: #aaaaaa">@@ -562,8 +566,6 @@ static void stdio_get_output_data(
</span>     void **stdio_buf,
     int *stdio_buf_sz)
 {
<span style="background: #ffdddd; color: #000000">-    /* TODO: implement reduction operator */
-
</span>     assert(stdio_runtime);
 
     *stdio_buf = (void *)(stdio_runtime->file_record_array);
</code></pre>

<br>
</li>

</div>
<div class="footer" style="margin-top: 10px">
<p style="color: #777; font-size: small">

<br>
<a href="https://xgitlab.cels.anl.gov/darshan/darshan/commit/af624bef45196e97f98b52b24f8832d12bbd9e91">View it on GitLab</a>.
<br>
You're receiving this email because of your account on xgitlab.cels.anl.gov.
If you'd like to receive fewer emails, you can
adjust your notification settings.

</p>
</div>
</body>
</html>