dm vdo uds-threads: eliminate uds_*_semaphore interfaces
authorMike Snitzer <snitzer@kernel.org>
Fri, 9 Feb 2024 16:46:04 +0000 (10:46 -0600)
committerMike Snitzer <snitzer@kernel.org>
Fri, 1 Mar 2024 14:25:32 +0000 (09:25 -0500)
The implementation of thread 'barrier' data structure does not require
overdone private semaphore wrappers.  Also rename the barrier
structure's 'mutex' member (a semaphore) to 'lock'.

Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Matthew Sakai <msakai@redhat.com>
drivers/md/dm-vdo/uds-threads.c
drivers/md/dm-vdo/uds-threads.h

index 33117f68cf361fa610eafce36c3747fbb2d8cc8b..af6c58eaf449de05276df93f02771615663471b2 100644 (file)
@@ -136,19 +136,7 @@ int uds_join_threads(struct thread *thread)
        return UDS_SUCCESS;
 }
 
-static inline int __must_check uds_initialize_semaphore(struct semaphore *semaphore,
-                                                       unsigned int value)
-{
-       sema_init(semaphore, value);
-       return UDS_SUCCESS;
-}
-
-static inline int uds_destroy_semaphore(struct semaphore *semaphore)
-{
-       return UDS_SUCCESS;
-}
-
-static inline void uds_acquire_semaphore(struct semaphore *semaphore)
+static inline void __down(struct semaphore *semaphore)
 {
        /*
         * Do not use down(semaphore). Instead use down_interruptible so that
@@ -169,53 +157,36 @@ static inline void uds_acquire_semaphore(struct semaphore *semaphore)
        }
 }
 
-static inline void uds_release_semaphore(struct semaphore *semaphore)
-{
-       up(semaphore);
-}
-
 int uds_initialize_barrier(struct barrier *barrier, unsigned int thread_count)
 {
-       int result;
-
-       /* FIXME: must cleanup, uds_initialize_semaphore never fails! */
-       result = uds_initialize_semaphore(&barrier->mutex, 1);
-       if (result != UDS_SUCCESS)
-               return result;
-
+       sema_init(&barrier->lock, 1);
        barrier->arrived = 0;
        barrier->thread_count = thread_count;
-       return uds_initialize_semaphore(&barrier->wait, 0);
+       sema_init(&barrier->wait, 0);
+
+       return UDS_SUCCESS;
 }
 
 int uds_destroy_barrier(struct barrier *barrier)
 {
-       int result;
-
-       result = uds_destroy_semaphore(&barrier->mutex);
-       if (result != UDS_SUCCESS)
-               return result;
-
-       return uds_destroy_semaphore(&barrier->wait);
+       return UDS_SUCCESS;
 }
 
 int uds_enter_barrier(struct barrier *barrier)
 {
-       bool last_thread;
-
-       uds_acquire_semaphore(&barrier->mutex);
-       last_thread = (++barrier->arrived == barrier->thread_count);
-       if (last_thread) {
+       __down(&barrier->lock);
+       if (++barrier->arrived == barrier->thread_count) {
+               /* last thread */
                int i;
 
                for (i = 1; i < barrier->thread_count; i++)
-                       uds_release_semaphore(&barrier->wait);
+                       up(&barrier->wait);
 
                barrier->arrived = 0;
-               uds_release_semaphore(&barrier->mutex);
+               up(&barrier->lock);
        } else {
-               uds_release_semaphore(&barrier->mutex);
-               uds_acquire_semaphore(&barrier->wait);
+               up(&barrier->lock);
+               __down(&barrier->wait);
        }
 
        return UDS_SUCCESS;
index b77a2d46da80012c1a3933869486e6c9e370a5a8..e6fa32af1feb04dd84e9a0a25fabe05489c2362a 100644 (file)
@@ -25,8 +25,8 @@ struct cond_var {
 struct thread;
 
 struct barrier {
-       /* Mutex for this barrier object */
-       struct semaphore mutex;
+       /* Lock for this barrier object */
+       struct semaphore lock;
        /* Semaphore for threads waiting at the barrier */
        struct semaphore wait;
        /* Number of threads which have arrived */