From nobody Wed Jul 29 11:05:43 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h98dp5zyMz6n50B for ; Wed, 29 Jul 2026 11:06:06 +0000 (UTC) (envelope-from kevin.bowling@kev009.com) Received: from mail-qt1-x831.google.com (mail-qt1-x831.google.com [IPv6:2607:f8b0:4864:20::831]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h98dj6Wrsz3gsl for ; Wed, 29 Jul 2026 11:05:56 +0000 (UTC) (envelope-from kevin.bowling@kev009.com) Authentication-Results: mx1.freebsd.org; dkim=none ("invalid DKIM record") header.d=kev009.com header.s=google header.b="cuas/IIK"; arc=pass ("google.com:s=arc-20260327:i=1"); spf=pass (mx1.freebsd.org: domain of kevin.bowling@kev009.com designates 2607:f8b0:4864:20::831 as permitted sender) smtp.mailfrom=kevin.bowling@kev009.com; dmarc=none Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-5218927884fso8019731cf.3 for ; Wed, 29 Jul 2026 04:05:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1785323155; cv=none; d=google.com; s=arc-20260327; b=bUtInZotFeNc9ivYmM9eKOoFi15Y964SSbOChsNHFhjeyi+XljjKWTdJthdbBcUWoj e+m+e6dnh69VqPO3grhk7fuLKNTMsv/Hnqn8XtXeOcqTsvHuIR5hCF4XvDxdZFLgvDal K03TTr5oXWu2FTEfdby8iQT8T8gMP7R78N0YErrUxL+eSskGhJG8xFAw+Ii1nj1ihvGx c94L9G7KqobeRL34btF69nK6iZhDFrTedhDZ1PxQyh0anwzgOlYT1LYgOCORiVouCu/1 +FQmqg+7YkViOw9XuYdAecQ5y4cUNWhANaBa18FDW2CQlW/sUfGgz8dzBYtlZvZq5d+E uyqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=iX+gSlCj7OnE1zaB4Gbn9WvQE9rfNHGhMrropWe8IYg=; fh=uPVY/dgkTkzIs8ZgnRJlnfptvyB+fQ+bcEoxhAe62S8=; b=rvklnKchaAa8WQUHU66xdLx3NlyMY7gDiVOv49j8tdaGIOF0t2/h1HTgBUrOnHth8p Rq9/stEr5HA4Vs6UqkADGfOaXKFjZXa1U+zLxHHv7UUdsifxqccVEjKMJ6UozPQX/i7K hG6EQaHNVw9LzRyLwRQcEYWUodJ6yYJJfNJIj29/LCuIiOaj8IBU8lAdajuMvNIhP2eh 4xLONaaZ/Phk+4gbwyQodsqshSzaN5Be17iOoXbHphM61UPgH90xwoKCbX4e7bpt97zH e1z7N+PPizolNpk04Mvjf49IFF9fCX3NmpU7E7rpw7fUquGh6+FrqEBIH0jVmASLsaSC /W0w==; darn=freebsd.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kev009.com; s=google; t=1785323155; x=1785927955; darn=freebsd.org; h=content-transfer-encoding:content-type:cc:to:subject:message-id :date:from:in-reply-to:references:mime-version:from:to:cc:subject :date:message-id:reply-to:content-type; bh=iX+gSlCj7OnE1zaB4Gbn9WvQE9rfNHGhMrropWe8IYg=; b=cuas/IIKG+6H4NZ8l0CE6XNQ+apuQB176u7LVrLcKtDe43dQVdlrZVoN+hCg7QLdE5 /ZW1pIhm8nZqjNQ7McTYibAMAtZAWyxurJri2RACBP6832J0F9S5a4yUOagGHMdDgJmH nF/lfZtxUKS1VfXpL/P0kvWPMlRp/g8+Dyv4c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785323155; x=1785927955; h=content-transfer-encoding:content-type:cc:to:subject:message-id :date:from:in-reply-to:references:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=iX+gSlCj7OnE1zaB4Gbn9WvQE9rfNHGhMrropWe8IYg=; b=Z1qsJmeySkpjDb5Nrxzx3ggH4Wo8yH8BuobZ/TRHYOt44VuuIVxvhWunPJyMJlTqit eBqUbyGgekNQvHg8uPHJerwk0wuo8JGqkPHc20Gn/epCurvaozjUfTeRmHiMzjoXpB3f cdkEbA8HvVp42Bz4JNv4CUmPrGSzxC1JH2X/5ZaNDTapELNNL6VndgL5RM8Kog3h7ChG cs2MYqpVBhbbRp9ZlqZ1oFb+RU29r5QKcv/QuBSI/6ruS1m0kmaaxJbySncky3uyn7js TBLLOBIab5hY6fKPRVR94jleA0ihcl4ITn1LIxBT3KBVhbuaw6emR+LGVEtIEMNg0D29 vXAw== X-Forwarded-Encrypted: i=1; AHgh+RolLBsG0icLDynCUsELATAsQLrsi2BQuzMG8Vkusw5NDaEU7dc+TFZ5p5qHrQlexoAxeFS84Nplz8t7Z5+LSaBIXieWPw==@freebsd.org X-Gm-Message-State: AOJu0YziaUYNbR50d9d6mPsAuE8uNNqWR3FJCeWRReS47IqGHP5O/lZh a1ptghMZM9gsIWt4FcFJGj8L3BDAhR6VLbe6hfuHH9hkHsvpID1aNgklI7dlSwVKYrdxs8AvtB4 E0rtjG02pbyCBqXUCezEP43JFuI3UNnhaHe78bt8IfXXZ+ZPhgb1YahV5 X-Gm-Gg: AR+sD11cpf+UY4wEYdHGNrobDv56ldHVsSpIqaAeWB2R1prP2Lu3c0EF2mwoto3u0qv eLoz/JQtvffz3wE0FKtPDkwETlubfhVqZWBGqDsRgQLmIwv4UVxjdkgev4rwkZKvCBGWdFjrTRh NOyxnHLrl8LI7OjTnOiEuD1Juc7JwqdCzb9VSW2zMf1NLaxfphyTa/gVfiWZadpcHJO9sTsIXLa rayLZDJexhXEV0H/li8S+bXbMJ2ThOecQXPgU0u/eXDYvpwvN3SOI+SrNbxByNrONiGLsCV0hn7 IAWY/wCyhrKXjJpHQvkCQiB38v++0ptfDGOqPK/78Q/D0oUVwlOvNLYfpzLO4L+uDpiUV1FxC+M +pHfpQoh8ZnSGeaRIWncyAGIbmHM/nmdQTxVAqGByYaoQV3w17u1PZQuJIWHhr95f6bH63W6D7N F+PkOZ4nSr1uo= X-Received: by 2002:ac8:7f51:0:b0:517:58f6:29c3 with SMTP id d75a77b69052e-529d6fe2967mr53254641cf.32.1785323155164; Wed, 29 Jul 2026 04:05:55 -0700 (PDT) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 References: <6a67e66f.32351.45a31bd3@gitrepo.freebsd.org> In-Reply-To: <6a67e66f.32351.45a31bd3@gitrepo.freebsd.org> From: Kevin Bowling Date: Wed, 29 Jul 2026 04:05:43 -0700 X-Gm-Features: AUfX_mxXovrxXhnUqqi0ccK7EJ5O-8DE79KZ8AeIkbmpcnz8DMZjcOP7emt58do Message-ID: Subject: Re: git: 1f4b0ea4f3eb - main - kqueue: Add a helper macro for sleeping on in-flux knotes To: Mark Johnston Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-4.21 / 15.00]; ARC_ALLOW(-1.00)[google.com:s=arc-20260327:i=1]; NEURAL_HAM_LONG(-1.00)[-0.998]; NEURAL_HAM_SHORT(-0.99)[-0.986]; NEURAL_HAM_MEDIUM(-0.93)[-0.929]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4864::/56:c]; MIME_GOOD(-0.10)[text/plain]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; TO_DN_SOME(0.00)[]; R_DKIM_PERMFAIL(0.00)[kev009.com:s=google]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::831:from]; RCVD_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[]; MLMMJ_DEST(0.00)[dev-commits-src-main@freebsd.org]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; MISSING_XM_UA(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[dev-commits-src-main@freebsd.org]; DMARC_NA(0.00)[kev009.com]; DKIM_TRACE(0.00)[kev009.com:~] X-Rspamd-Queue-Id: 4h98dj6Wrsz3gsl X-Spamd-Bar: ---- Hi Mark, This is resulting in relatively easy to trigger panic with 'syncthing' running under INVARIANTS: panic: kqueue_scan: knote 0xfffffe018aeab930 not on kqueue 0xfffff80010aa24= 00 The panic occurs at the new KASSERT in KQ_FLUX_SLEEP_WMESG(), called from kqueue_scan() line 2197. Two Syncthing threads were concurrently scanning the same kqueue. kgdb showed that the knote named in the panic was exactly the other scanning thread=E2=80=99s local marker: &marker =3D 0xfffffe018aeab930 marker.kn_status =3D KN_MARKER marker.kn_kq =3D NULL kq =3D 0xfffff80010aa2400 I have the full backtraces if useful. Regards, Kevin On Mon, Jul 27, 2026 at 4:15=E2=80=AFPM Mark Johnston w= rote: > > The branch main has been updated by markj: > > URL: https://cgit.FreeBSD.org/src/commit/?id=3D1f4b0ea4f3eb1b8a885eff8bd0= d332156f0c3e1f > > commit 1f4b0ea4f3eb1b8a885eff8bd0d332156f0c3e1f > Author: Mark Johnston > AuthorDate: 2026-07-27 23:12:16 +0000 > Commit: Mark Johnston > CommitDate: 2026-07-27 23:12:16 +0000 > > kqueue: Add a helper macro for sleeping on in-flux knotes > > Other in-flux operations are implemented by this set of macros, so we > should do the same for sleeping. > > No functional change intended. > > Reviewed by: kib > MFC after: 1 week > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D58443 > --- > sys/kern/kern_event.c | 32 ++++++++++++++++---------------- > 1 file changed, 16 insertions(+), 16 deletions(-) > > diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c > index 23e9d309f74c..60c3b18a07eb 100644 > --- a/sys/kern/kern_event.c > +++ b/sys/kern/kern_event.c > @@ -257,6 +257,14 @@ SYSCTL_UINT(_kern, OID_AUTO, kq_calloutmax, CTLFLAG_= RW, > wakeup((kq)); \ > } \ > } while (0) > +#define KQ_FLUX_SLEEP_WMESG(kq, kn, flags, wmesg) do { \ > + KASSERT((kn)->kn_kq =3D=3D (kq), = \ > + ("%s: knote %p not on kqueue %p", __func__, kn, kq)); \ > + (kq)->kq_state |=3D KQ_FLUXWAIT; = \ > + msleep((kq), &(kq)->kq_lock, PSOCK | (flags), (wmesg), 0); \ > +} while (0) > +#define KQ_FLUX_SLEEP(kq, kn, flags) \ > + KQ_FLUX_SLEEP_WMESG(kq, kn, flags, "kqfluxwt") > #define KQ_UNLOCK_FLUX(kq) do { = \ > KQ_FLUX_WAKEUP(kq); \ > mtx_unlock(&(kq)->kq_lock); \ > @@ -1789,8 +1797,7 @@ findkn: > FILEDESC_XUNLOCK(td->td_proc->p_fd); > filedesc_unlock =3D 0; > } > - kq->kq_state |=3D KQ_FLUXWAIT; > - msleep(kq, &kq->kq_lock, PSOCK | PDROP, "kqflxwt", 0); > + KQ_FLUX_SLEEP(kq, kn, PDROP); > if (fp !=3D NULL) { > fdrop(fp, td); > fp =3D NULL; > @@ -2187,9 +2194,7 @@ retry: > influx =3D 0; > KQ_FLUX_WAKEUP(kq); > } > - kq->kq_state |=3D KQ_FLUXWAIT; > - error =3D msleep(kq, &kq->kq_lock, PSOCK, > - "kqflxwt", 0); > + KQ_FLUX_SLEEP(kq, kn, 0); > continue; > } > > @@ -2423,8 +2428,7 @@ kqueue_drain(struct kqueue *kq, struct thread *td) > for (i =3D 0; i < kq->kq_knlistsize; i++) { > while ((kn =3D SLIST_FIRST(&kq->kq_knlist[i])) !=3D NULL)= { > if (kn_in_flux(kn)) { > - kq->kq_state |=3D KQ_FLUXWAIT; > - msleep(kq, &kq->kq_lock, PSOCK, "kqclo1",= 0); > + KQ_FLUX_SLEEP_WMESG(kq, kn, 0, "kqclo1"); > continue; > } > kn_enter_flux(kn); > @@ -2437,9 +2441,8 @@ kqueue_drain(struct kqueue *kq, struct thread *td) > for (i =3D 0; i <=3D kq->kq_knhashmask; i++) { > while ((kn =3D SLIST_FIRST(&kq->kq_knhash[i])) != =3D NULL) { > if (kn_in_flux(kn)) { > - kq->kq_state |=3D KQ_FLUXWAIT; > - msleep(kq, &kq->kq_lock, PSOCK, > - "kqclo2", 0); > + KQ_FLUX_SLEEP_WMESG(kq, kn, 0, > + "kqclo2"); > continue; > } > kn_enter_flux(kn); > @@ -2834,8 +2837,7 @@ knlist_cleardel(struct knlist *knl, struct thread *= td, int islocked, int killkn) > KQ_LOCK(kq); > KASSERT(kn_in_flux(kn), ("knote removed w/o list lock")); > knl->kl_unlock(knl->kl_lockarg); > - kq->kq_state |=3D KQ_FLUXWAIT; > - msleep(kq, &kq->kq_lock, PSOCK | PDROP, "kqkclr", 0); > + KQ_FLUX_SLEEP_WMESG(kq, kn, PDROP, "kqkclr"); > kq =3D NULL; > knl->kl_lock(knl->kl_lockarg); > } > @@ -2881,8 +2883,7 @@ knote_fdclose(struct thread *td, int fd) > * the case that it's in the process of b= eing > * dropped anyways. > */ > - kq->kq_state |=3D KQ_FLUXWAIT; > - msleep(kq, &kq->kq_lock, PSOCK, "kqflxwt"= , 0); > + KQ_FLUX_SLEEP(kq, kn, 0); > continue; > } > kn_enter_flux(kn); > @@ -2946,8 +2947,7 @@ knote_drop_detached(struct knote *kn, struct thread= *td) > kn, kn->kn_influx)); > if (kn->kn_influx =3D=3D 1) > break; > - kq->kq_state |=3D KQ_FLUXWAIT; > - msleep(kq, &kq->kq_lock, PSOCK, "kqflxwt", 0); > + KQ_FLUX_SLEEP(kq, kn, 0); > } > > MPASS(kn->kn_kq =3D=3D kq); >