Loading src/client/gkfs_libc.cpp +27 −27 Original line number Diff line number Diff line Loading @@ -1372,7 +1372,7 @@ fcntl(int fd, int cmd, ...) // TODO (arg & FD_CLOEXEC)); return 0; /*case F_GETLK: { case F_GETLK: { DEBUG_INFO("[GKFS] F_GETLK {}", fd); auto res = real_fcntl(fd, cmd, arg); return res; Loading @@ -1398,7 +1398,7 @@ fcntl(int fd, int cmd, ...) // TODO DEBUG_INFO("[GKFS] F_SETOWN {}", fd); auto res = real_fcntl(fd, cmd, arg); return res; }*/ } default: DEBUG_INFO("[GKFS] NOTSUPPORTED {}", fd); Loading src/client/hooks.cpp +34 −29 Original line number Diff line number Diff line Loading @@ -918,35 +918,40 @@ hook_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) { CTX->file_map()->get(fd)->set_flag( gkfs::filemap::OpenFile_flags::cloexec, (arg & FD_CLOEXEC)); return 0; /* case F_GETLK: LOG(ERROR, "{}() F_GETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); LOG(ERROR, "{}() F_GETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETLK: LOG(ERROR, "{}() F_SETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETLKW: LOG(ERROR, "{}() F_SETLKW on fd (on underlying fd) {}", __func__, fd); LOG(ERROR, "{}() F_SETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETLKW: LOG(ERROR, "{}() F_SETLKW on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_GETOWN: case __F_GETOWN_EX: LOG(ERROR, "{}() F_GETOWN on fd (on underlying fd) {}", __func__, fd); syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_GETOWN: case __F_GETOWN_EX: LOG(ERROR, "{}() F_GETOWN on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETOWN: case __F_SETOWN_EX: LOG(ERROR, "{}() F_SETOWN on fd (on underlying fd) {}", __func__, fd); syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETOWN: case __F_SETOWN_EX: LOG(ERROR, "{}() F_SETOWN on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); */ syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); default: LOG(ERROR, "{}() unrecognized command {} on fd {}", __func__, cmd, fd); Loading src/client/open_file_map.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -163,8 +163,24 @@ OpenFileMap::safe_generate_fd_idx_() { } } else { // Some architectures do not support SYS_open #define REALLOCK #ifndef REALLOCK fd = syscall_no_intercept(SYS_openat, AT_FDCWD, "/dev/null", O_RDWR, S_IRUSR | S_IWUSR); #else // create an empty temporal file in /tmp/gtmp/, and open it using syscall_no_intercept std::string tmp_file = "/tmp/gko/tmpfileXXXXXX"; char* tmp_file_c = new char[tmp_file.length() + 1]; strcpy(tmp_file_c, tmp_file.c_str()); fd = mkstemp(tmp_file_c); // syscall_no_intercept(SYS_fchmod, fd, S_IRUSR | S_IWUSR); if (fd == -1) { LOG(ERROR, "Could not create temporary file"); return -1; } #endif } return fd; } Loading Loading
src/client/gkfs_libc.cpp +27 −27 Original line number Diff line number Diff line Loading @@ -1372,7 +1372,7 @@ fcntl(int fd, int cmd, ...) // TODO (arg & FD_CLOEXEC)); return 0; /*case F_GETLK: { case F_GETLK: { DEBUG_INFO("[GKFS] F_GETLK {}", fd); auto res = real_fcntl(fd, cmd, arg); return res; Loading @@ -1398,7 +1398,7 @@ fcntl(int fd, int cmd, ...) // TODO DEBUG_INFO("[GKFS] F_SETOWN {}", fd); auto res = real_fcntl(fd, cmd, arg); return res; }*/ } default: DEBUG_INFO("[GKFS] NOTSUPPORTED {}", fd); Loading
src/client/hooks.cpp +34 −29 Original line number Diff line number Diff line Loading @@ -918,35 +918,40 @@ hook_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) { CTX->file_map()->get(fd)->set_flag( gkfs::filemap::OpenFile_flags::cloexec, (arg & FD_CLOEXEC)); return 0; /* case F_GETLK: LOG(ERROR, "{}() F_GETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); LOG(ERROR, "{}() F_GETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETLK: LOG(ERROR, "{}() F_SETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETLKW: LOG(ERROR, "{}() F_SETLKW on fd (on underlying fd) {}", __func__, fd); LOG(ERROR, "{}() F_SETLK on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETLKW: LOG(ERROR, "{}() F_SETLKW on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_GETOWN: case __F_GETOWN_EX: LOG(ERROR, "{}() F_GETOWN on fd (on underlying fd) {}", __func__, fd); syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_GETOWN: case __F_GETOWN_EX: LOG(ERROR, "{}() F_GETOWN on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETOWN: case __F_SETOWN_EX: LOG(ERROR, "{}() F_SETOWN on fd (on underlying fd) {}", __func__, fd); syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); case F_SETOWN: case __F_SETOWN_EX: LOG(ERROR, "{}() F_SETOWN on fd (on underlying fd) {}", __func__, fd); return gsl::narrow_cast<int>( syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); */ syscall_no_intercept_wrapper(SYS_fcntl, fd, cmd, arg)); default: LOG(ERROR, "{}() unrecognized command {} on fd {}", __func__, cmd, fd); Loading
src/client/open_file_map.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -163,8 +163,24 @@ OpenFileMap::safe_generate_fd_idx_() { } } else { // Some architectures do not support SYS_open #define REALLOCK #ifndef REALLOCK fd = syscall_no_intercept(SYS_openat, AT_FDCWD, "/dev/null", O_RDWR, S_IRUSR | S_IWUSR); #else // create an empty temporal file in /tmp/gtmp/, and open it using syscall_no_intercept std::string tmp_file = "/tmp/gko/tmpfileXXXXXX"; char* tmp_file_c = new char[tmp_file.length() + 1]; strcpy(tmp_file_c, tmp_file.c_str()); fd = mkstemp(tmp_file_c); // syscall_no_intercept(SYS_fchmod, fd, S_IRUSR | S_IWUSR); if (fd == -1) { LOG(ERROR, "Could not create temporary file"); return -1; } #endif } return fd; } Loading