Commit 196eae16 authored by Shane Snyder's avatar Shane Snyder
Browse files

Merge branch 'master' into 'python-package'

# Conflicts:
#   darshan-util/darshan-logutils.c
parents a1da405c e714fec8
...@@ -95,8 +95,8 @@ ...@@ -95,8 +95,8 @@
if(*(int64_t *)__vals == 0) break; \ if(*(int64_t *)__vals == 0) break; \
for(i_=0; i_<4; i_++) { \ for(i_=0; i_<4; i_++) { \
if(__add_flag && \ if(__add_flag && \
!memcmp(__val_p + (i_ * __val_size), \ !memcmp(__val_p + (i_ * (__val_size)), \
__vals, sizeof(*__vals) * __val_size)) { \ __vals, sizeof(*__vals) * (__val_size))) { \
total_count += *(__cnt_p + i_); \ total_count += *(__cnt_p + i_); \
break; \ break; \
} \ } \
...@@ -107,9 +107,9 @@ ...@@ -107,9 +107,9 @@
for(i_=0; i_ < 4; i_++) { \ for(i_=0; i_ < 4; i_++) { \
if((*(__cnt_p + i_) > total_count) || \ if((*(__cnt_p + i_) > total_count) || \
((*(__cnt_p + i_) == total_count) && \ ((*(__cnt_p + i_) == total_count) && \
(*(__val_p + (i_ * __val_size)) > *(int64_t *)__vals))) { \ (*(__val_p + (i_ * (__val_size))) > *(int64_t *)__vals))) { \
memcpy(&tmp_val[tmp_ndx * __val_size], __val_p + (i_ * __val_size), \ memcpy(&tmp_val[tmp_ndx * (__val_size)], __val_p + (i_ * (__val_size)), \
sizeof(*__vals) * __val_size); \ sizeof(*__vals) * (__val_size)); \
tmp_cnt[tmp_ndx] = *(__cnt_p + i_); \ tmp_cnt[tmp_ndx] = *(__cnt_p + i_); \
tmp_ndx++; \ tmp_ndx++; \
} \ } \
...@@ -117,21 +117,21 @@ ...@@ -117,21 +117,21 @@
} \ } \
if(tmp_ndx == 4) break; /* all done, updated counter is not added */ \ if(tmp_ndx == 4) break; /* all done, updated counter is not added */ \
/* next, add the updated counter */ \ /* next, add the updated counter */ \
memcpy(&tmp_val[tmp_ndx * __val_size], __vals, sizeof(*__vals) * __val_size); \ memcpy(&tmp_val[tmp_ndx * (__val_size)], __vals, sizeof(*__vals) * (__val_size)); \
tmp_cnt[tmp_ndx] = total_count; \ tmp_cnt[tmp_ndx] = total_count; \
tmp_ndx++; \ tmp_ndx++; \
/* last, copy over any remaining counters to make sure we have 4 sets total */ \ /* last, copy over any remaining counters to make sure we have 4 sets total */ \
while(tmp_ndx != 4) { \ while(tmp_ndx != 4) { \
if(memcmp(__val_p + (i_ * __val_size), \ if(memcmp(__val_p + (i_ * (__val_size)), \
__vals, sizeof(*__vals) * __val_size)) { \ __vals, sizeof(*__vals) * (__val_size))) { \
memcpy(&tmp_val[tmp_ndx * __val_size], __val_p + (i_ * __val_size), \ memcpy(&tmp_val[tmp_ndx * (__val_size)], __val_p + (i_ * (__val_size)), \
sizeof(*__vals) * __val_size); \ sizeof(*__vals) * (__val_size)); \
tmp_cnt[tmp_ndx] = *(__cnt_p + i_); \ tmp_cnt[tmp_ndx] = *(__cnt_p + i_); \
tmp_ndx++; \ tmp_ndx++; \
} \ } \
i_++; \ i_++; \
} \ } \
memcpy(__val_p, tmp_val, 4*sizeof(int64_t)*__val_size); \ memcpy(__val_p, tmp_val, 4*sizeof(int64_t)*(__val_size)); \
memcpy(__cnt_p, tmp_cnt, 4*sizeof(int64_t)); \ memcpy(__cnt_p, tmp_cnt, 4*sizeof(int64_t)); \
} while(0) } while(0)
......
...@@ -2036,7 +2036,8 @@ static void darshan_core_cleanup(struct darshan_core_runtime* core) ...@@ -2036,7 +2036,8 @@ static void darshan_core_cleanup(struct darshan_core_runtime* core)
#endif #endif
#ifdef HAVE_MPI #ifdef HAVE_MPI
PMPI_Comm_free(&core->mpi_comm); if(using_mpi)
PMPI_Comm_free(&core->mpi_comm);
#endif #endif
if(core->comp_buf) if(core->comp_buf)
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <libgen.h> #include <libgen.h>
#include <aio.h> #include <aio.h>
#include <pthread.h> #include <pthread.h>
#include <limits.h>
#include "utlist.h" #include "utlist.h"
#include "darshan.h" #include "darshan.h"
...@@ -42,6 +43,8 @@ typedef int64_t off64_t; ...@@ -42,6 +43,8 @@ typedef int64_t off64_t;
DARSHAN_FORWARD_DECL(open, int, (const char *path, int flags, ...)); DARSHAN_FORWARD_DECL(open, int, (const char *path, int flags, ...));
DARSHAN_FORWARD_DECL(open64, int, (const char *path, int flags, ...)); DARSHAN_FORWARD_DECL(open64, int, (const char *path, int flags, ...));
DARSHAN_FORWARD_DECL(__open_2, int, (const char *path, int oflag)); DARSHAN_FORWARD_DECL(__open_2, int, (const char *path, int oflag));
DARSHAN_FORWARD_DECL(openat, int, (int dirfd, const char *pathname, int flags, ...));
DARSHAN_FORWARD_DECL(openat64, int, (int dirfd, const char *pathname, int flags, ...));
DARSHAN_FORWARD_DECL(creat, int, (const char* path, mode_t mode)); DARSHAN_FORWARD_DECL(creat, int, (const char* path, mode_t mode));
DARSHAN_FORWARD_DECL(creat64, int, (const char* path, mode_t mode)); DARSHAN_FORWARD_DECL(creat64, int, (const char* path, mode_t mode));
DARSHAN_FORWARD_DECL(dup, int, (int oldfd)); DARSHAN_FORWARD_DECL(dup, int, (int oldfd));
...@@ -481,6 +484,148 @@ int DARSHAN_DECL(open64)(const char *path, int flags, ...) ...@@ -481,6 +484,148 @@ int DARSHAN_DECL(open64)(const char *path, int flags, ...)
return(ret); return(ret);
} }
int DARSHAN_DECL(openat)(int dirfd, const char *pathname, int flags, ...)
{
int mode = 0;
int ret;
double tm1, tm2;
struct posix_file_record_ref *rec_ref;
char tmp_path[PATH_MAX] = {0};
char *dirpath = NULL;
MAP_OR_FAIL(openat);
if(flags & O_CREAT)
{
va_list arg;
va_start(arg, flags);
mode = va_arg(arg, int);
va_end(arg);
tm1 = darshan_core_wtime();
ret = __real_openat(dirfd, pathname, flags, mode);
tm2 = darshan_core_wtime();
}
else
{
tm1 = darshan_core_wtime();
ret = __real_openat(dirfd, pathname, flags);
tm2 = darshan_core_wtime();
}
POSIX_PRE_RECORD();
if(pathname[0] == '/' || dirfd == AT_FDCWD)
{
/* ignore dirfd in these cases:
* - absolute path
* - dirfd equal to CWD
*/
POSIX_RECORD_OPEN(ret, pathname, mode, tm1, tm2);
}
else
{
/* construct path relative to dirfd */
rec_ref = darshan_lookup_record_ref(posix_runtime->fd_hash,
&dirfd, sizeof(dirfd));
if(rec_ref)
{
dirpath = darshan_core_lookup_record_name(rec_ref->file_rec->base_rec.id);
if(dirpath)
{
strcat(tmp_path, dirpath);
if(dirpath[strlen(dirpath)-1] != '/')
strcat(tmp_path, "/");
strcat(tmp_path, pathname);
}
}
if(dirpath)
{
/* we were able to construct an absolute path */
POSIX_RECORD_OPEN(ret, tmp_path, mode, tm1, tm2);
}
else
{
/* fallback to relative path if Darshan doesn't know dirfd path */
POSIX_RECORD_OPEN(ret, pathname, mode, tm1, tm2);
}
}
POSIX_POST_RECORD();
return(ret);
}
int DARSHAN_DECL(openat64)(int dirfd, const char *pathname, int flags, ...)
{
int mode = 0;
int ret;
double tm1, tm2;
struct posix_file_record_ref *rec_ref;
char tmp_path[PATH_MAX] = {0};
char *dirpath = NULL;
MAP_OR_FAIL(openat64);
if(flags & O_CREAT)
{
va_list arg;
va_start(arg, flags);
mode = va_arg(arg, int);
va_end(arg);
tm1 = darshan_core_wtime();
ret = __real_openat64(dirfd, pathname, flags, mode);
tm2 = darshan_core_wtime();
}
else
{
tm1 = darshan_core_wtime();
ret = __real_openat64(dirfd, pathname, flags);
tm2 = darshan_core_wtime();
}
POSIX_PRE_RECORD();
if(pathname[0] == '/' || dirfd == AT_FDCWD)
{
/* ignore dirfd in these cases:
* - absolute path
* - dirfd equal to CWD
*/
POSIX_RECORD_OPEN(ret, pathname, mode, tm1, tm2);
}
else
{
/* construct path relative to dirfd */
rec_ref = darshan_lookup_record_ref(posix_runtime->fd_hash,
&dirfd, sizeof(dirfd));
if(rec_ref)
{
dirpath = darshan_core_lookup_record_name(rec_ref->file_rec->base_rec.id);
if(dirpath)
{
strcat(tmp_path, dirpath);
if(dirpath[strlen(dirpath)-1] != '/')
strcat(tmp_path, "/");
strcat(tmp_path, pathname);
}
}
if(dirpath)
{
/* we were able to construct an absolute path */
POSIX_RECORD_OPEN(ret, tmp_path, mode, tm1, tm2);
}
else
{
/* fallback to relative path if Darshan doesn't know dirfd path */
POSIX_RECORD_OPEN(ret, pathname, mode, tm1, tm2);
}
}
POSIX_POST_RECORD();
return(ret);
}
int DARSHAN_DECL(creat)(const char* path, mode_t mode) int DARSHAN_DECL(creat)(const char* path, mode_t mode)
{ {
int ret; int ret;
......
--wrap=open --wrap=open
--wrap=open64 --wrap=open64
--wrap=__open_2 --wrap=__open_2
--wrap=openat
--wrap=openat64
--wrap=creat --wrap=creat
--wrap=creat64 --wrap=creat64
--wrap=dup --wrap=dup
......
...@@ -2106,7 +2106,7 @@ void darshan_log_get_name_records(darshan_fd fd, ...@@ -2106,7 +2106,7 @@ void darshan_log_get_name_records(darshan_fd fd,
if(ret < 0) if(ret < 0)
{ {
darshan_log_close(fd); darshan_log_close(fd);
//return(-1); return;
} }
int num = HASH_CNT(hlink, name_hash); int num = HASH_CNT(hlink, name_hash);
......
...@@ -70,7 +70,7 @@ struct darshan_mnt_info ...@@ -70,7 +70,7 @@ struct darshan_mnt_info
struct darshan_mod_info struct darshan_mod_info
{ {
char *name; const char *name;
int len; int len;
int ver; int ver;
int idx; int idx;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment