Commit 9b5dd4d6 authored by Ramon Nou's avatar Ramon Nou
Browse files

reallock wip

parent 049b9785
Loading
Loading
Loading
Loading
+27 −27
Original line number Diff line number Diff line
@@ -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;
@@ -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);
+34 −29
Original line number Diff line number Diff line
@@ -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);
+16 −0
Original line number Diff line number Diff line
@@ -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;
}