diff --git a/src/dftracer/brahma/posix.cpp b/src/dftracer/brahma/posix.cpp index 587ff3e..18f4b01 100644 --- a/src/dftracer/brahma/posix.cpp +++ b/src/dftracer/brahma/posix.cpp @@ -382,11 +382,21 @@ ssize_t brahma::POSIXDFTracer::readlink(const char *path, char *buf, ssize_t brahma::POSIXDFTracer::readlinkat(int fd, const char *path, char *buf, size_t bufsize) { BRAHMA_MAP_OR_FAIL(readlinkat); - DFT_LOGGER_START(fd); - DFT_LOGGER_UPDATE(fd); - DFT_LOGGER_UPDATE(bufsize); - ssize_t ret = __real_readlinkat(fd, path, buf, bufsize); - DFT_LOGGER_END(); + ssize_t ret; + if (fd != AT_FDCWD) { + DFT_LOGGER_START(fd); + DFT_LOGGER_UPDATE(fd); + DFT_LOGGER_UPDATE(path); + DFT_LOGGER_UPDATE(bufsize); + ret = __real_readlinkat(fd, path, buf, bufsize); + DFT_LOGGER_END(); + } else { + DFT_LOGGER_START(path); + DFT_LOGGER_UPDATE(fd); + DFT_LOGGER_UPDATE(bufsize); + ret = __real_readlinkat(fd, path, buf, bufsize); + DFT_LOGGER_END(); + } return ret; } diff --git a/src/dftracer/brahma/posix.h b/src/dftracer/brahma/posix.h index 01ce95f..df6a869 100644 --- a/src/dftracer/brahma/posix.h +++ b/src/dftracer/brahma/posix.h @@ -30,7 +30,7 @@ class POSIXDFTracer : public POSIX { bool trace_all_files; inline uint16_t is_traced(int fd, const char *func) { - if (fd == -1) return 0; + if (fd < 0) return 0; uint16_t trace = tracked_fd[fd % MAX_FD]; if (trace != 0) { DFTRACER_LOG_DEBUG(