Loading src/client/gkfs_libc.cpp +33 −18 Original line number Diff line number Diff line Loading @@ -2265,31 +2265,46 @@ pwritev2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) { // tails. // */ DLSYM_WRAPPER(int, aio_write, (struct aiocb * aiocbp), (aiocbp), "aio_write"); int aio_write(struct aiocb* aiocbp) { initializeGekko(); if(gkfs::preload::PreloadContext::getInstance()->interception_enabled() && is_gkfs_fd(fd)) { auto res = gkfs::syscall::gkfs_write( aiocbp->aio_fildes, (const void*)aiocbp->aio_buf, aiocbp->aio_nbytes); /* if(CTX->interception_enabled() && is_gkfs_fd(aiocbp->aio_fildes)) { gkfs::syscall::gkfs_write(aiocbp->aio_fildes, (const void*) aiocbp->aio_buf, aiocbp->aio_nbytes); // TODO : SIGNALING IS WRONG*/ // return 0; } GKFS_FALLBACK(aio_write, aiocbp) } DLSYM_WRAPPER(int, aio_read, (struct aiocb * aiocbp), (aiocbp), "aio_read"); int aio_read(struct aiocb* aiocbp) { initializeGekko(); if(CTX->interception_enabled() && is_gkfs_fd(aiocbp->aio_fildes)) { gkfs::syscall::gkfs_read(aiocbp->aio_fildes, (void*) aiocbp->aio_buf, aiocbp->aio_nbytes); if(aiocbp->aio_sigevent.sigev_notify == SIGEV_SIGNAL) { // send signal of completation sigaction(aiocbp->aio_sigevent.sigev_signo, NULL, NULL); } else if (aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD){ aiocbp->aio_sigevent.sigev_notify_function(aiocbp->aio_sigevent.sigev_value); } else if (aiocbp->aio_sigevent.sigev_notify == SIGEV_NONE){ kill(getpid(), aiocbp->aio_sigevent.sigev_signo); } else if(aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) { aiocbp->aio_sigevent.sigev_notify_function( aiocbp->aio_sigevent.sigev_value); } else if(aiocbp->aio_sigevent.sigev_notify == SIGEV_NONE) { } */ // TODO : SIGNALING IS WRONG // return res; // return 0; } GKFS_FALLBACK(aio_write, aiocbp) aiocbp->aio_nbytes = 0; // TODO : NOt overwrite the buffer GKFS_FALLBACK(aio_read, aiocbp) } Loading
src/client/gkfs_libc.cpp +33 −18 Original line number Diff line number Diff line Loading @@ -2265,31 +2265,46 @@ pwritev2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) { // tails. // */ DLSYM_WRAPPER(int, aio_write, (struct aiocb * aiocbp), (aiocbp), "aio_write"); int aio_write(struct aiocb* aiocbp) { initializeGekko(); if(gkfs::preload::PreloadContext::getInstance()->interception_enabled() && is_gkfs_fd(fd)) { auto res = gkfs::syscall::gkfs_write( aiocbp->aio_fildes, (const void*)aiocbp->aio_buf, aiocbp->aio_nbytes); /* if(CTX->interception_enabled() && is_gkfs_fd(aiocbp->aio_fildes)) { gkfs::syscall::gkfs_write(aiocbp->aio_fildes, (const void*) aiocbp->aio_buf, aiocbp->aio_nbytes); // TODO : SIGNALING IS WRONG*/ // return 0; } GKFS_FALLBACK(aio_write, aiocbp) } DLSYM_WRAPPER(int, aio_read, (struct aiocb * aiocbp), (aiocbp), "aio_read"); int aio_read(struct aiocb* aiocbp) { initializeGekko(); if(CTX->interception_enabled() && is_gkfs_fd(aiocbp->aio_fildes)) { gkfs::syscall::gkfs_read(aiocbp->aio_fildes, (void*) aiocbp->aio_buf, aiocbp->aio_nbytes); if(aiocbp->aio_sigevent.sigev_notify == SIGEV_SIGNAL) { // send signal of completation sigaction(aiocbp->aio_sigevent.sigev_signo, NULL, NULL); } else if (aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD){ aiocbp->aio_sigevent.sigev_notify_function(aiocbp->aio_sigevent.sigev_value); } else if (aiocbp->aio_sigevent.sigev_notify == SIGEV_NONE){ kill(getpid(), aiocbp->aio_sigevent.sigev_signo); } else if(aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) { aiocbp->aio_sigevent.sigev_notify_function( aiocbp->aio_sigevent.sigev_value); } else if(aiocbp->aio_sigevent.sigev_notify == SIGEV_NONE) { } */ // TODO : SIGNALING IS WRONG // return res; // return 0; } GKFS_FALLBACK(aio_write, aiocbp) aiocbp->aio_nbytes = 0; // TODO : NOt overwrite the buffer GKFS_FALLBACK(aio_read, aiocbp) }