@@ -43,6 +43,9 @@ enum IouringOpcode {
4343 SW_IORING_OP_FUTEX_WAIT = IORING_OP_FUTEX_WAIT ,
4444 SW_IORING_OP_FUTEX_WAKE = IORING_OP_FUTEX_WAKE ,
4545#endif
46+ #ifdef HAVE_IOURING_FTRUNCATE
47+ SW_IORING_OP_FTRUNCATE = IORING_OP_FTRUNCATE ,
48+ #endif
4649
4750 SW_IORING_OP_FSTAT = 100 ,
4851 SW_IORING_OP_LSTAT = 101 ,
@@ -226,6 +229,10 @@ static const char *get_opcode_name(IouringOpcode opcode) {
226229 return " FUTEX_WAIT" ;
227230 case SW_IORING_OP_FUTEX_WAKE :
228231 return " FUTEX_WAKE" ;
232+ #endif
233+ #ifdef HAVE_IOURING_FTRUNCATE
234+ case SW_IORING_OP_FTRUNCATE :
235+ return " FTRUNCATE" ;
229236#endif
230237 default :
231238 return " unknown" ;
@@ -307,7 +314,7 @@ bool Iouring::dispatch(IouringEvent *event) {
307314 case SW_IORING_OP_READ :
308315 case SW_IORING_OP_WRITE :
309316 sqe->fd = event->fd ;
310- sqe->addr = (uintptr_t ) (event->opcode == SW_IORING_OP_READ ? event->rbuf : event->wbuf );
317+ sqe->addr = (uintptr_t )(event->opcode == SW_IORING_OP_READ ? event->rbuf : event->wbuf );
311318 sqe->len = event->size ;
312319 sqe->off = -1 ;
313320 sqe->opcode = event->opcode ;
@@ -384,6 +391,15 @@ bool Iouring::dispatch(IouringEvent *event) {
384391 sqe->futex_flags = 0 ;
385392 sqe->addr3 = FUTEX_BITSET_MATCH_ANY ;
386393 break ;
394+ #ifdef HAVE_IOURING_FTRUNCATE
395+ case SW_IORING_OP_FTRUNCATE :
396+ sqe->opcode = SW_IORING_OP_FTRUNCATE ;
397+ sqe->fd = event->fd ;
398+ sqe->off = event->size ;
399+ sqe->addr = 0 ;
400+ sqe->len = 0 ;
401+ break ;
402+ #endif
387403#endif
388404 default :
389405 abort ();
@@ -476,6 +492,16 @@ int Iouring::fdatasync(int fd) {
476492 return static_cast <int >(execute (&event));
477493}
478494
495+ #ifdef HAVE_IOURING_FTRUNCATE
496+ int Iouring::ftruncate (int fd, off_t length) {
497+ INIT_EVENT (SW_IORING_OP_FTRUNCATE );
498+ event.fd = fd;
499+ event.size = length;
500+
501+ return static_cast <int >(execute (&event));
502+ }
503+ #endif
504+
479505#ifdef HAVE_IOURING_STATX
480506static void swoole_statx_to_stat (const struct statx *statxbuf, struct stat *statbuf) {
481507 statbuf->st_dev = (((unsigned int ) statxbuf->stx_dev_major ) << 8 ) | (unsigned int ) statxbuf->stx_dev_minor ;
0 commit comments