git: 1a0314d6e305 - stable/14 - ctladm: Fix a race when loading ctl.ko

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Tue, 02 Jul 2024 13:22:36 UTC
The branch stable/14 has been updated by markj:

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

commit 1a0314d6e30554fc2b07caa5121b00956f416cc4
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-06-24 15:09:18 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-07-02 13:19:29 +0000

    ctladm: Fix a race when loading ctl.ko
    
    If multiple ctladm processes try to load ctl.ko at the same time, only
    one will succeed.  Handle this possibility by retrying the operation
    (open /dev/cam/ctl) if kldload returns EEXIST, rather than bailing.
    This at least helps ensure that ctladm tests can be run in parallel
    when ctl.ko is not preloaded.
    
    Reviewed by:    asomers
    MFC after:      1 week
    
    (cherry picked from commit 7d6932d20aedbbb220cd78e90ab4e82d1abaad31)
---
 usr.sbin/ctladm/ctladm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/usr.sbin/ctladm/ctladm.c b/usr.sbin/ctladm/ctladm.c
index e99610373ff0..228af7bae8c6 100644
--- a/usr.sbin/ctladm/ctladm.c
+++ b/usr.sbin/ctladm/ctladm.c
@@ -4133,7 +4133,7 @@ main(int argc, char **argv)
 		if (fd == -1 && errno == ENOENT) {
 			saved_errno = errno;
 			retval = kldload("ctl");
-			if (retval != -1)
+			if (retval != -1 || errno == EEXIST)
 				fd = open(device, O_RDWR);
 			else
 				errno = saved_errno;