RTEMS | Draft: posix/aio: Implemented lio_listio() (!275)
    Gedare Bloom (@gedare) 
    gitlab at rtems.org
       
    Wed Oct 30 15:17:52 UTC 2024
    
    
  
Merge request https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275 was reviewed by Gedare Bloom
--
  
Gedare Bloom started a new discussion on cpukit/include/rtems/posix/aio_misc.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114016
 > +#define AIO_SIGNALED   0
 > +
 > +/** signal not generated for suspend call */
Capital `Signal` for consistency with nearby comments. Do you need both, or can you use `!(AIO_SIGNALED)`?
It is more common for something that sets a signal to be 1, and to clear the signal with 0.
--
  
Gedare Bloom started a new discussion on cpukit/include/rtems/posix/aio_misc.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114017
 > +  int notified;
 > +
 > +} suspendcb;
This name and also `listcb` are not appropriate for use here. Only names that are defined within POSIX or are in the `rtems_` namespace should be exported by header files. I would suggest using `rtems_aio_suspendcb` at a minimum.
--
  
Gedare Bloom started a new discussion on cpukit/include/rtems/posix/aio_misc.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114018
 > + * @param listcbp a pointer to the list control block.
 >   */
 >  void rtems_aio_completed_list_op( listcb *listcbp );
While you're at it, you could change `listcb` to be `rtems_aio_listcb`. This would constitute an API change and requires further documentation.
--
  
Gedare Bloom started a new discussion on cpukit/include/rtems/rtems/event.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114019
 > + *   aio list completion, used when lio_listio is called using LIO_WAIT.
 > + */
 > +#define RTEMS_EVENT_SYSTEM_AIO_SUSPEND RTEMS_EVENT_27
The content in this file is automatically generated. We'll need to get some help how to update this correctly following the guidance from https://docs.rtems.org/branches/master/eng/req/index.html
--
  
Gedare Bloom started a new discussion on cpukit/include/aio.h: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114020
 > +
 > +
 > +
too many blank lines
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_misc.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114021
 >  #include <errno.h>
 >  #include <limits.h>
 > +#include <stdio.h>
why do you need this header?
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_misc.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114022
 >  }
 >  
 > +void rtems_aio_completed_suspend_op( suspendcb *suspendcbp )
should this be returning a status or error codes?
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_misc.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114023
 > +
 > +  if ( suspendcbp->notified == AIO_NONSIGNALED ) {
 > +    rtems_event_system_send(
I would feel better if the event send can happen outside of the locked critical section. I'd have to check the documentation more closely to see if this is a real problem, but if the code can be refactored to read/update the critical node data first, and then send the event outside the critical section, this may be better.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_misc.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114024
 > +
 > +  if( suspendcbp->requests_left == 0 ) {
 > +    free( suspendcbp );
Another thread could be holding the `suspendcbp->mutex`? This is a race condition bug waiting to happen.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_misc.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114025
 >  }
 >  
 > +void rtems_aio_completed_suspend_op( suspendcb *suspendcbp )
usually we would like the function to contain a verb. Is this function "completing" or "suspending"? I think the name could use some more discussion.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114026
 > +  suspendcbp = malloc( sizeof( suspendcb ) );
 > +  if ( suspendcbp == NULL ) {
 > +    rtems_set_errno_and_return_minus_one( EAGAIN );
`ENOMEM`?
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114027
 > +
 > +  /* LOCK REQUEST QUEUE */
 > +  pthread_mutex_lock( &aio_request_queue.mutex );
Make sure the ordering of these locks is always consistent to avoid deadlock.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114028
 > +
 > +  /* ITERATE OVER EVERY REQUEST */
 > +  for ( int i = 0; i < nent; i++ ) {
declare `int i` at the start of the function block, not within the `for()`.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114029
 > +    r_chain = rtems_aio_search_fd( work_req_chain, list[i]->aio_fildes, 0 );
 > +    if ( r_chain != NULL ) {
 > +      //SEARCH IN CHAIN
use `/* */` for consistency. Also would prefer regular/mixed case, not ALL CAPS
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114030
 > +        if ( current->suspendcbp == NULL ) {
 > +          current->suspendcbp = suspendcbp;
 > +        }
suggest refactoring these lines to a helper function. Especially since you use basically the same logic again near line 129.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114031
 > +
 > +      //REQUEST NOT PRESENT
 > +      continue;
This is superfluous at the bottom of a loop.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114032
 > +  if ( suspendcbp->requests_left <= 0 ) {
 > +    pthread_mutex_unlock( &aio_request_queue.mutex );
 > +    free( suspendcbp );
Here you free `suspendcbp` with the `suspendcbp->mutex` held, and then return. This is a bug.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114033
 > +    );
 > +  }else {
 > +    long ticks = rtems_timespec_to_ticks( timeout );
This API is being changed to return a `time_t` (i hope). I suggest you cast it here to `time_t` instead of `long`.
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114034
 > +    }
 > +  }
 > +  if ( op_num == 0 ) {
Can it be `< 0`?
--
  
Gedare Bloom started a new discussion on cpukit/posix/src/aio_suspend.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114035
 > +      &event_out
 > +    );  
 > +  }
I suggest refactoring this timeout checking/event part to a helper function.
--
  
Gedare Bloom started a new discussion on testsuites/psxtests/psxaio06/init.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275#note_114036
 > + */
 > +
 > +
avoid multiple blank lines
-- 
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/275
You're receiving this email because of your account on gitlab.rtems.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20241030/3fefa50b/attachment-0001.htm>
    
    
More information about the bugs
mailing list