aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@kernel.org>2024-02-09 10:46:04 -0600
committerMike Snitzer <snitzer@kernel.org>2024-03-01 09:25:32 -0500
commit2d98aa17806f2a76c1f0dc8cf9f7d40571c80159 (patch)
treef759c0cafdc359a4a0c8e68ddc94ece547d90438 /drivers/md
parent9d8741894520ceeac3f45e88e9ef2dacc084041d (diff)
downloadlinux-2d98aa17806f2a76c1f0dc8cf9f7d40571c80159.tar.gz
dm vdo uds-threads: eliminate uds_*_semaphore interfaces
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>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm-vdo/uds-threads.c55
-rw-r--r--drivers/md/dm-vdo/uds-threads.h4
2 files changed, 15 insertions, 44 deletions
diff --git a/drivers/md/dm-vdo/uds-threads.c b/drivers/md/dm-vdo/uds-threads.c
index 33117f68cf361..af6c58eaf449d 100644
--- a/drivers/md/dm-vdo/uds-threads.c
+++ b/drivers/md/dm-vdo/uds-threads.c
@@ -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;
diff --git a/drivers/md/dm-vdo/uds-threads.h b/drivers/md/dm-vdo/uds-threads.h
index b77a2d46da800..e6fa32af1feb0 100644
--- a/drivers/md/dm-vdo/uds-threads.h
+++ b/drivers/md/dm-vdo/uds-threads.h
@@ -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 */