Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Jun 2025 04:07:34 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b3a93154db74 - main - Extract exterr_to_ue()
Message-ID:  <202506030407.55347YiF071025@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=b3a93154db74e44d44d0210c728e12c713393a50

commit b3a93154db74e44d44d0210c728e12c713393a50
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-05-31 21:08:57 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-06-03 02:43:58 +0000

    Extract exterr_to_ue()
    
    Reviewed by:    brooks
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D50633
---
 sys/kern/sys_generic.c | 28 +++++++++++++++++++---------
 sys/sys/exterrvar.h    |  2 ++
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index 91bf3e93fa7c..ec61d0bdc541 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -2202,6 +2202,23 @@ file_kcmp_generic(struct file *fp1, struct file *fp2, struct thread *td)
 	return (kcmp_cmp((uintptr_t)fp1->f_data, (uintptr_t)fp2->f_data));
 }
 
+int
+exterr_to_ue(struct thread *td, struct uexterror *ue)
+{
+	if ((td->td_pflags2 & TDP2_EXTERR) == 0)
+		return (ENOENT);
+
+	memset(ue, 0, sizeof(*ue));
+	ue->error = td->td_kexterr.error;
+	ue->cat = td->td_kexterr.cat;
+	ue->src_line = td->td_kexterr.src_line;
+	ue->p1 = td->td_kexterr.p1;
+	ue->p2 = td->td_kexterr.p2;
+	if (td->td_kexterr.msg != NULL)
+		strlcpy(ue->msg, td->td_kexterr.msg, sizeof(ue->msg));
+	return (0);
+}
+
 void
 exterr_copyout(struct thread *td)
 {
@@ -2215,18 +2232,11 @@ exterr_copyout(struct thread *td)
 
 	uloc = (char *)td->td_exterr_ptr + __offsetof(struct uexterror,
 	    error);
-	if ((td->td_pflags2 & TDP2_EXTERR) == 0) {
+	error = exterr_to_ue(td, &ue);
+	if (error != 0) {
 		ue.error = 0;
 		sz = sizeof(ue.error);
 	} else {
-		memset(&ue, 0, sizeof(ue));
-		ue.error = td->td_kexterr.error;
-		ue.cat = td->td_kexterr.cat;
-		ue.src_line = td->td_kexterr.src_line;
-		ue.p1 = td->td_kexterr.p1;
-		ue.p2 = td->td_kexterr.p2;
-		if (td->td_kexterr.msg != NULL)
-			strlcpy(ue.msg, td->td_kexterr.msg, sizeof(ue.msg));
 		sz = sizeof(ue) - __offsetof(struct uexterror, error);
 	}
 	error = copyout(&ue.error, uloc, sz);
diff --git a/sys/sys/exterrvar.h b/sys/sys/exterrvar.h
index 5f55e377239a..3fe2c7446ed1 100644
--- a/sys/sys/exterrvar.h
+++ b/sys/sys/exterrvar.h
@@ -62,6 +62,8 @@ struct uexterror {
 #define	SET_ERROR0(eerror, mmsg)	SET_ERROR2(eerror, mmsg, 0, 0)
 #define	SET_ERROR1(eerror, mmsg, pp1)	SET_ERROR2(eerror, mmsg, pp1, 0)
 
+int exterr_to_ue(struct thread *td, struct uexterror *ue);
+
 #else	/* _KERNEL */
 
 __BEGIN_DECLS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506030407.55347YiF071025>