• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.5.8/xnu-1228.15.4/bsd/kern/

Lines Matching defs:entryp

153 static boolean_t	aio_delay_fsync_request( aio_workq_entry *entryp );
154 static int aio_free_request( aio_workq_entry *entryp, vm_map_t the_map );
158 static boolean_t aio_last_group_io( aio_workq_entry *entryp );
159 static void aio_mark_requests( aio_workq_entry *entryp );
163 static int aio_validate( aio_workq_entry *entryp );
170 static void do_aio_completion( aio_workq_entry *entryp );
171 static int do_aio_fsync( aio_workq_entry *entryp );
172 static int do_aio_read( aio_workq_entry *entryp );
173 static int do_aio_write( aio_workq_entry *entryp );
349 aio_workq_entry *entryp;
364 TAILQ_FOREACH( entryp, &p->aio_doneq, aio_workq_link ) {
365 if ( entryp->uaiocbp == uap->aiocbp ) {
366 *retval = entryp->errorval;
375 TAILQ_FOREACH( entryp, &p->aio_activeq, aio_workq_link ) {
376 if ( entryp->uaiocbp == uap->aiocbp ) {
386 TAILQ_FOREACH( entryp, &aio_anchor.aio_async_workq, aio_workq_link ) {
387 if ( p == entryp->procp && entryp->uaiocbp == uap->aiocbp ) {
489 aio_workq_entry *entryp;
507 TAILQ_FOREACH( entryp, &p->aio_doneq, aio_workq_link ) {
508 if ( entryp->uaiocbp == uap->aiocbp ) {
509 TAILQ_REMOVE( &p->aio_doneq, entryp, aio_workq_link );
513 *retval = entryp->returnval;
516 if ( (entryp->flags & AIO_COMPLETION) == 0 ) {
519 my_map = entryp->aio_map;
520 entryp->aio_map = VM_MAP_NULL;
523 aio_free_request( entryp, my_map );
527 entryp->flags |= AIO_DO_FREE;
536 TAILQ_FOREACH( entryp, &p->aio_activeq, aio_workq_link ) {
537 if ( entryp->uaiocbp == uap->aiocbp ) {
546 TAILQ_FOREACH( entryp, &aio_anchor.aio_async_workq, aio_workq_link ) {
547 if ( p == entryp->procp && entryp->uaiocbp == uap->aiocbp ) {
603 aio_workq_entry *entryp;
639 entryp = TAILQ_FIRST( &p->aio_doneq );
640 while ( entryp != NULL ) {
643 next_entryp = TAILQ_NEXT( entryp, aio_workq_link );
644 TAILQ_REMOVE( &p->aio_doneq, entryp, aio_workq_link );
649 if ( (entryp->flags & AIO_COMPLETION) == 0 ) {
652 my_map = entryp->aio_map;
653 entryp->aio_map = VM_MAP_NULL;
655 aio_free_request( entryp, my_map );
660 entryp = TAILQ_FIRST( &p->aio_doneq );
665 entryp->flags |= AIO_DO_FREE;
666 entryp = next_entryp;
697 aio_workq_entry *entryp;
704 entryp = TAILQ_FIRST( &aio_anchor.aio_async_workq );
705 while ( entryp != NULL ) {
708 next_entryp = TAILQ_NEXT( entryp, aio_workq_link );
709 if ( p == entryp->procp ) {
711 (aiocbp != USER_ADDR_NULL && entryp->uaiocbp == aiocbp) ||
712 (aiocbp == USER_ADDR_NULL && fd == entryp->aiocb.aio_fildes) ) {
715 TAILQ_REMOVE( &aio_anchor.aio_async_workq, entryp, aio_workq_link );
717 entryp->errorval = ECANCELED;
718 entryp->returnval = -1;
720 entryp->flags |= AIO_DISABLE; /* flag for special completion processing */
724 (int)entryp->procp, (int)entryp->uaiocbp, fd, 0, 0 );
726 TAILQ_INSERT_TAIL( &p->aio_doneq, entryp, aio_workq_link );
729 entryp->flags |= AIO_COMPLETION;
733 do_aio_completion( entryp );
736 entryp->flags &= ~AIO_COMPLETION;
737 if ( (entryp->flags & AIO_DO_FREE) != 0 ) {
740 my_map = entryp->aio_map;
741 entryp->aio_map = VM_MAP_NULL;
743 aio_free_request( entryp, my_map );
755 entryp = TAILQ_FIRST( &aio_anchor.aio_async_workq );
759 entryp = next_entryp;
767 entryp = TAILQ_FIRST( &aio_anchor.lio_sync_workq );
768 while ( entryp != NULL ) {
771 next_entryp = TAILQ_NEXT( entryp, aio_workq_link );
772 if ( p == entryp->procp ) {
774 (aiocbp != USER_ADDR_NULL && entryp->uaiocbp == aiocbp) ||
775 (aiocbp == USER_ADDR_NULL && fd == entryp->aiocb.aio_fildes) ) {
778 TAILQ_REMOVE( &aio_anchor.lio_sync_workq, entryp, aio_workq_link );
780 entryp->errorval = ECANCELED;
781 entryp->returnval = -1;
783 entryp->flags |= AIO_DISABLE; /* flag for special completion processing */
787 (int)entryp->procp, (int)entryp->uaiocbp, fd, 0, 0 );
789 TAILQ_INSERT_TAIL( &p->aio_doneq, entryp, aio_workq_link );
798 entryp = next_entryp;
805 TAILQ_FOREACH( entryp, &p->aio_activeq, aio_workq_link ) {
807 (aiocbp != USER_ADDR_NULL && entryp->uaiocbp == aiocbp) ||
808 (aiocbp == USER_ADDR_NULL && fd == entryp->aiocb.aio_fildes) ) {
812 (int)entryp->procp, (int)entryp->uaiocbp, fd, 0, 0 );
815 entryp->flags |= AIO_WAITING; /* flag for special completion processing */
817 entryp->flags |= AIO_DISABLE; /* flag for special completion processing */
831 TAILQ_FOREACH( entryp, &p->aio_doneq, aio_workq_link ) {
833 (aiocbp != USER_ADDR_NULL && entryp->uaiocbp == aiocbp) ||
834 (aiocbp == USER_ADDR_NULL && fd == entryp->aiocb.aio_fildes) ) {
838 (int)entryp->procp, (int)entryp->uaiocbp, fd, 0, 0 );
878 aio_workq_entry *entryp;
968 TAILQ_FOREACH( entryp, &p->aio_doneq, aio_workq_link ) {
969 if ( entryp->uaiocbp == aiocbp ) {
998 * (see entryp->uaiocbp == aiocbp after check_for_our_aiocbp label)
1159 aio_workq_entry *entryp;
1162 entryp = *(entryp_listp + i);
1163 if ( entryp == NULL )
1168 aio_get_process_count( entryp->procp ) >= aio_max_requests_per_process ||
1169 is_already_queued( entryp->procp, entryp->uaiocbp ) == TRUE ) {
1172 my_map = entryp->aio_map;
1173 entryp->aio_map = VM_MAP_NULL;
1177 aio_free_request( entryp, my_map );
1184 TAILQ_INSERT_TAIL( &aio_anchor.aio_async_workq, entryp, aio_workq_link );
1188 (int)p, (int)entryp->uaiocbp, 0, 0, 0 );
1191 TAILQ_INSERT_TAIL( &aio_anchor.lio_sync_workq, entryp, aio_workq_link );
1201 aio_workq_entry *entryp;
1207 entryp = TAILQ_FIRST( &aio_anchor.lio_sync_workq );
1208 while ( entryp != NULL ) {
1209 if ( p == entryp->procp && group_tag == entryp->group_tag ) {
1211 TAILQ_REMOVE( &aio_anchor.lio_sync_workq, entryp, aio_workq_link );
1215 if ( (entryp->flags & AIO_READ) != 0 ) {
1216 error = do_aio_read( entryp );
1218 else if ( (entryp->flags & AIO_WRITE) != 0 ) {
1219 error = do_aio_write( entryp );
1221 else if ( (entryp->flags & AIO_FSYNC) != 0 ) {
1222 error = do_aio_fsync( entryp );
1226 __FUNCTION__, entryp->flags );
1229 entryp->errorval = error;
1235 TAILQ_INSERT_TAIL( &p->aio_doneq, entryp, aio_workq_link );
1241 entryp = TAILQ_FIRST( &aio_anchor.lio_sync_workq );
1243 } /* p == entryp->procp */
1245 entryp = TAILQ_NEXT( entryp, aio_workq_link );
1246 } /* while ( entryp != NULL ) */
1279 aio_workq_entry *entryp;
1283 entryp = aio_get_some_work();
1284 if ( entryp == NULL ) {
1307 (int)entryp->procp, (int)entryp->uaiocbp, entryp->flags, 0, 0 );
1314 if ( currentmap != entryp->aio_map ) {
1317 uthreadp->uu_aio_task = entryp->procp->task;
1318 oldmap = vm_map_switch( entryp->aio_map );
1321 if ( (entryp->flags & AIO_READ) != 0 ) {
1322 error = do_aio_read( entryp );
1324 else if ( (entryp->flags & AIO_WRITE) != 0 ) {
1325 error = do_aio_write( entryp );
1327 else if ( (entryp->flags & AIO_FSYNC) != 0 ) {
1328 error = do_aio_fsync( entryp );
1332 __FUNCTION__, entryp->flags );
1335 entryp->errorval = error;
1336 if ( currentmap != entryp->aio_map ) {
1344 TAILQ_REMOVE( &entryp->procp->aio_activeq, entryp, aio_workq_link );
1346 entryp->procp->aio_active_count--;
1347 TAILQ_INSERT_TAIL( &entryp->procp->aio_doneq, entryp, aio_workq_link );
1349 entryp->procp->aio_done_count++;
1350 entryp->flags |= AIO_COMPLETION;
1353 if ( VM_MAP_NULL != entryp->aio_map ) {
1356 my_map = entryp->aio_map;
1357 entryp->aio_map = VM_MAP_NULL;
1365 do_aio_completion( entryp );
1368 (int)entryp->procp, (int)entryp->uaiocbp, entryp->errorval,
1369 entryp->returnval, 0 );
1372 entryp->flags &= ~AIO_COMPLETION;
1373 if ( (entryp->flags & AIO_DO_FREE) != 0 ) {
1376 my_map = entryp->aio_map;
1377 entryp->aio_map = VM_MAP_NULL;
1379 aio_free_request( entryp, my_map );
1401 aio_workq_entry *entryp;
1404 for ( entryp = TAILQ_FIRST( &aio_anchor.aio_async_workq );
1405 entryp != NULL;
1406 entryp = TAILQ_NEXT( entryp, aio_workq_link ) ) {
1408 if ( (entryp->flags & AIO_FSYNC) != 0 ) {
1411 if ( aio_delay_fsync_request( entryp ) ) {
1414 (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
1421 if ( entryp != NULL ) {
1422 TAILQ_REMOVE( &aio_anchor.aio_async_workq, entryp, aio_workq_link );
1424 TAILQ_INSERT_TAIL( &entryp->procp->aio_activeq, entryp, aio_workq_link );
1426 entryp->procp->aio_active_count++;
1429 return( entryp );
1441 aio_delay_fsync_request( aio_workq_entry *entryp )
1445 TAILQ_FOREACH( my_entryp, &entryp->procp->aio_activeq, aio_workq_link ) {
1447 entryp->uaiocbp == my_entryp->fsyncp &&
1448 entryp->aiocb.aio_fildes == my_entryp->aiocb.aio_fildes ) {
1468 aio_workq_entry *entryp;
1471 entryp = (aio_workq_entry *) zalloc( aio_workq_zonep );
1472 if ( entryp == NULL ) {
1476 bzero( entryp, sizeof(*entryp) );
1479 entryp->procp = procp;
1480 entryp->uaiocbp = aiocbp;
1481 entryp->flags |= kindOfIO;
1482 entryp->aio_map = VM_MAP_NULL;
1489 do_munge_aiocb( &aiocb32, &entryp->aiocb );
1491 result = copyin( aiocbp, &entryp->aiocb, sizeof(entryp->aiocb) );
1499 result = aio_validate( entryp );
1504 entryp->aio_map = get_task_map( procp->task );
1505 vm_map_reference( entryp->aio_map );
1509 if ( is_already_queued( entryp->procp, entryp->uaiocbp ) == TRUE ) {
1532 aio_mark_requests( entryp );
1535 TAILQ_INSERT_TAIL( &aio_anchor.aio_async_workq, entryp, aio_workq_link );
1547 if ( entryp != NULL ) {
1550 aio_free_request( entryp, entryp->aio_map );
1573 aio_workq_entry *entryp;
1576 entryp = (aio_workq_entry *) zalloc( aio_workq_zonep );
1577 if ( entryp == NULL ) {
1581 bzero( entryp, sizeof(*entryp) );
1584 entryp->procp = procp;
1585 entryp->uaiocbp = aiocbp;
1586 entryp->flags |= AIO_LIO;
1587 entryp->group_tag = group_tag;
1588 entryp->aio_map = VM_MAP_NULL;
1595 do_munge_aiocb( &aiocb32, &entryp->aiocb );
1597 result = copyin( aiocbp, &entryp->aiocb, sizeof(entryp->aiocb) );
1606 if ( entryp->aiocb.aio_lio_opcode == LIO_NOP ) {
1627 entryp->aiocb.aio_sigevent.sigev_notify = sigevent32.sigev_notify;
1628 entryp->aiocb.aio_sigevent.sigev_signo = sigevent32.sigev_signo;
1629 entryp->aiocb.aio_sigevent.sigev_value.size_equivalent.sival_int =
1631 entryp->aiocb.aio_sigevent.sigev_notify_function =
1633 entryp->aiocb.aio_sigevent.sigev_notify_attributes =
1637 result = copyin( sigp, &entryp->aiocb.aio_sigevent, sizeof(entryp->aiocb.aio_sigevent) );
1646 result = aio_validate( entryp );
1651 entryp->aio_map = get_task_map( procp->task );
1652 vm_map_reference( entryp->aio_map );
1654 *entrypp = entryp;
1658 if ( entryp != NULL )
1659 zfree( aio_workq_zonep, entryp );
1675 aio_mark_requests( aio_workq_entry *entryp )
1679 TAILQ_FOREACH( my_entryp, &entryp->procp->aio_activeq, aio_workq_link ) {
1680 if ( entryp->aiocb.aio_fildes == my_entryp->aiocb.aio_fildes ) {
1681 my_entryp->fsyncp = entryp->uaiocbp;
1686 if ( entryp->procp == my_entryp->procp &&
1687 entryp->aiocb.aio_fildes == my_entryp->aiocb.aio_fildes ) {
1688 my_entryp->fsyncp = entryp->uaiocbp;
1708 aio_workq_entry *entryp;
1711 entryp = (aio_workq_entry *) zalloc( aio_workq_zonep );
1712 if ( entryp == NULL ) {
1716 bzero( entryp, sizeof(*entryp) );
1719 entryp->procp = procp;
1720 entryp->uaiocbp = aiocbp;
1721 entryp->flags |= AIO_LIO;
1722 entryp->group_tag = group_tag;
1723 entryp->aio_map = VM_MAP_NULL;
1730 do_munge_aiocb( &aiocb32, &entryp->aiocb );
1732 result = copyin( aiocbp, &entryp->aiocb, sizeof(entryp->aiocb) );
1741 if ( entryp->aiocb.aio_lio_opcode == LIO_NOP ) {
1746 result = aio_validate( entryp );
1751 *entrypp = entryp;
1755 if ( entryp != NULL )
1756 zfree( aio_workq_zonep, entryp );
1771 aio_free_request( aio_workq_entry *entryp, vm_map_t the_map )
1778 zfree( aio_workq_zonep, entryp );
1789 aio_validate( aio_workq_entry *entryp )
1797 if ( (entryp->flags & AIO_LIO) != 0 ) {
1798 if ( entryp->aiocb.aio_lio_opcode == LIO_READ )
1799 entryp->flags |= AIO_READ;
1800 else if ( entryp->aiocb.aio_lio_opcode == LIO_WRITE )
1801 entryp->flags |= AIO_WRITE;
1802 else if ( entryp->aiocb.aio_lio_opcode == LIO_NOP )
1809 if ( (entryp->flags & (AIO_WRITE | AIO_FSYNC)) != 0 ) {
1813 if ( (entryp->flags & (AIO_READ | AIO_WRITE)) != 0 ) {
1815 if ( entryp->aiocb.aio_nbytes > INT_MAX ||
1816 entryp->aiocb.aio_buf == USER_ADDR_NULL ||
1817 entryp->aiocb.aio_offset < 0 )
1825 if ( entryp->aiocb.aio_sigevent.sigev_notify == SIGEV_SIGNAL ) {
1828 signum = entryp->aiocb.aio_sigevent.sigev_signo;
1833 else if ( entryp->aiocb.aio_sigevent.sigev_notify != SIGEV_NONE )
1839 proc_fdlock(entryp->procp);
1841 result = fp_lookup( entryp->procp, entryp->aiocb.aio_fildes, &fp , 1);
1853 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp , 1);
1859 proc_fdunlock(entryp->procp);
1876 aio_workq_entry *entryp;
1886 TAILQ_FOREACH( entryp, &aio_anchor.aio_async_workq, aio_workq_link ) {
1887 if ( procp == entryp->procp ) {
1893 TAILQ_FOREACH( entryp, &aio_anchor.lio_sync_workq, aio_workq_link ) {
1894 if ( procp == entryp->procp ) {
1929 do_aio_completion( aio_workq_entry *entryp )
1932 if ( entryp->aiocb.aio_sigevent.sigev_notify == SIGEV_SIGNAL &&
1933 (entryp->flags & AIO_DISABLE) == 0 ) {
1939 if ( entryp->group_tag == 0 ||
1940 (entryp->group_tag != 0 && aio_last_group_io( entryp )) ) {
1942 (int)entryp->procp, (int)entryp->uaiocbp,
1943 entryp->aiocb.aio_sigevent.sigev_signo, 0, 0 );
1945 psignal( entryp->procp, entryp->aiocb.aio_sigevent.sigev_signo );
1959 if ( (entryp->flags & AIO_WAITING) != 0 ) {
1963 (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
1966 active_requests = aio_active_requests_for_process( entryp->procp );
1970 wakeup_one( (caddr_t) &entryp->procp->AIO_CLEANUP_SLEEP_CHAN );
1973 (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
1990 wakeup_one( (caddr_t) &entryp->procp->AIO_SUSPEND_SLEEP_CHAN );
1994 (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
2009 aio_last_group_io( aio_workq_entry *entryp )
2014 TAILQ_FOREACH( my_entryp, &entryp->procp->aio_activeq, aio_workq_link ) {
2015 if ( my_entryp->group_tag == entryp->group_tag )
2021 if ( my_entryp->group_tag == entryp->group_tag )
2027 if ( my_entryp->group_tag == entryp->group_tag )
2040 do_aio_read( aio_workq_entry *entryp )
2046 if ( (error = fp_lookup(entryp->procp, entryp->aiocb.aio_fildes, &fp , 0)) )
2049 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp, 0);
2055 * Needs vfs_context_t from vfs_context_create() in entryp!
2057 context.vc_thread = proc_thread(entryp->procp); /* XXX */
2061 entryp->aiocb.aio_buf,
2062 entryp->aiocb.aio_nbytes,
2063 entryp->aiocb.aio_offset, FOF_OFFSET,
2064 &entryp->returnval);
2065 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp, 0);
2076 do_aio_write( aio_workq_entry *entryp )
2082 if ( (error = fp_lookup(entryp->procp, entryp->aiocb.aio_fildes, &fp , 0)) )
2085 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp, 0);
2091 * Needs vfs_context_t from vfs_context_create() in entryp!
2093 context.vc_thread = proc_thread(entryp->procp); /* XXX */
2099 entryp->aiocb.aio_buf,
2100 entryp->aiocb.aio_nbytes,
2101 entryp->aiocb.aio_offset,
2103 &entryp->returnval);
2105 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp, 0);
2131 do_aio_fsync( aio_workq_entry *entryp )
2144 error = fp_getfvp( entryp->procp, entryp->aiocb.aio_fildes, &fp, &vp);
2147 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp, 0);
2148 entryp->returnval = -1;
2158 fp_drop(entryp->procp, entryp->aiocb.aio_fildes, fp, 0);
2161 entryp->returnval = -1;
2179 aio_workq_entry *entryp;
2185 TAILQ_FOREACH( entryp, &procp->aio_doneq, aio_workq_link ) {
2186 if ( aiocbp == entryp->uaiocbp ) {
2193 TAILQ_FOREACH( entryp, &procp->aio_activeq, aio_workq_link ) {
2194 if ( aiocbp == entryp->uaiocbp ) {
2201 TAILQ_FOREACH( entryp, &aio_anchor.aio_async_workq, aio_workq_link ) {
2202 if ( procp == entryp->procp && aiocbp == entryp->uaiocbp ) {
2209 TAILQ_FOREACH( entryp, &aio_anchor.lio_sync_workq, aio_workq_link ) {
2210 if ( procp == entryp->procp && aiocbp == entryp->uaiocbp ) {