git: f4bf48c25c3a - main - GEOM: Minor polishing in geom_event.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 28 Dec 2021 02:01:12 UTC
The branch main has been updated by mav:
URL: https://cgit.FreeBSD.org/src/commit/?id=f4bf48c25c3a8de3fbfd49b45b2d59026df13a6a
commit f4bf48c25c3a8de3fbfd49b45b2d59026df13a6a
Author: Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-12-28 01:52:59 +0000
Commit: Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-12-28 02:01:08 +0000
GEOM: Minor polishing in geom_event.
- Remove timeouts from msleep()'s. Those should always be woken up.
- Move wakeup() under the lock to not call on possibly freed pointer.
- Remove some dead code.
MFC after: 2 weeks
---
sys/geom/geom.h | 1 -
sys/geom/geom_event.c | 27 +++------------------------
2 files changed, 3 insertions(+), 25 deletions(-)
diff --git a/sys/geom/geom.h b/sys/geom/geom.h
index 0d6d74d0b51c..d48deb0e0ae4 100644
--- a/sys/geom/geom.h
+++ b/sys/geom/geom.h
@@ -268,7 +268,6 @@ int g_attr_changed(struct g_provider *pp, const char *attr, int flag);
int g_media_changed(struct g_provider *pp, int flag);
int g_media_gone(struct g_provider *pp, int flag);
void g_orphan_provider(struct g_provider *pp, int error);
-void g_waitidlelock(void);
struct g_event *g_alloc_event(int flag);
void g_post_event_ep(g_event_t *func, void *arg, struct g_event *ep, ...);
diff --git a/sys/geom/geom_event.c b/sys/geom/geom_event.c
index f9a1d445d36a..359c7c984f07 100644
--- a/sys/geom/geom_event.c
+++ b/sys/geom/geom_event.c
@@ -90,29 +90,12 @@ g_waitidle(void)
TSWAIT("GEOM events");
while (!TAILQ_EMPTY(&g_events))
msleep(&g_pending_events, &g_eventlock, PPAUSE,
- "g_waitidle", hz/5);
+ "g_waitidle", 0);
TSUNWAIT("GEOM events");
mtx_unlock(&g_eventlock);
curthread->td_pflags &= ~TDP_GEOM;
}
-#if 0
-void
-g_waitidlelock(void)
-{
-
- g_topology_assert();
- mtx_lock(&g_eventlock);
- while (!TAILQ_EMPTY(&g_events)) {
- g_topology_unlock();
- msleep(&g_pending_events, &g_eventlock, PPAUSE,
- "g_waitidlel", hz/5);
- g_topology_lock();
- }
- mtx_unlock(&g_eventlock);
-}
-#endif
-
struct g_attrchanged_args {
struct g_provider *pp;
const char *attr;
@@ -254,10 +237,6 @@ one_event(void)
wakeup(&g_pending_events);
return (0);
}
- if (ep->flag & EV_INPROGRESS) {
- mtx_unlock(&g_eventlock);
- return (1);
- }
ep->flag |= EV_INPROGRESS;
mtx_unlock(&g_eventlock);
g_topology_assert();
@@ -269,8 +248,8 @@ one_event(void)
ep->flag &= ~EV_INPROGRESS;
if (ep->flag & EV_WAKEUP) {
ep->flag |= EV_DONE;
- mtx_unlock(&g_eventlock);
wakeup(ep);
+ mtx_unlock(&g_eventlock);
} else {
mtx_unlock(&g_eventlock);
g_free(ep);
@@ -457,7 +436,7 @@ g_waitfor_event(g_event_t *func, void *arg, int flag, ...)
mtx_lock(&g_eventlock);
while (!(ep->flag & EV_DONE))
- msleep(ep, &g_eventlock, PRIBIO, "g_waitfor_event", hz);
+ msleep(ep, &g_eventlock, PRIBIO, "g_waitfor_event", 0);
if (ep->flag & EV_CANCELED)
error = EAGAIN;
mtx_unlock(&g_eventlock);