From ff97a50f026624412f089c1653dfd61c7502b098 Mon Sep 17 00:00:00 2001 From: Tomohiro Kusumi Date: Fri, 2 Sep 2022 10:40:06 -0700 Subject: [PATCH] usr.sbin/makefs: Panic if fifo hits HAMMER2_XOPFIFO tsleep() calls assert(0), but explicitly panic if feed detects fifo limit. HAMMER2 in makefs has no dedicated XOP threads, so it can't sleep and nobody can wake it up. --- usr.sbin/makefs/hammer2/hammer2_admin.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/usr.sbin/makefs/hammer2/hammer2_admin.c b/usr.sbin/makefs/hammer2/hammer2_admin.c index adfe9af07e..1a8b34f076 100644 --- a/usr.sbin/makefs/hammer2/hammer2_admin.c +++ b/usr.sbin/makefs/hammer2/hammer2_admin.c @@ -781,6 +781,16 @@ hammer2_xop_feed(hammer2_xop_head_t *xop, hammer2_chain_t *chain, */ fifo = &xop->collect[clindex]; + /* + * makefs HAMMER2 has no dedicated XOP threads, + * so nothing we can do once fifo reaches HAMMER2_XOPFIFO. + * Fortunately, readdir VOP is the only VOP causes this, + * and makefs HAMMER2 doesn't implement it. + */ + if (fifo->ri == fifo->wi - HAMMER2_XOPFIFO) + panic("hammer2: \"%s\" reached fifo limit %d", + xop->desc->id, HAMMER2_XOPFIFO); + if (fifo->ri == fifo->wi - HAMMER2_XOPFIFO) lwkt_yield(); while (fifo->ri == fifo->wi - HAMMER2_XOPFIFO) { -- 2.11.4.GIT