From owner-svn-src-head@freebsd.org Sat Mar 14 02:36:46 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id ED3592746E0; Sat, 14 Mar 2020 02:36:46 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48fRXZ3zZSz4JYF; Sat, 14 Mar 2020 02:36:46 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E429918038; Sat, 14 Mar 2020 02:36:45 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 02E2ajpG076681; Sat, 14 Mar 2020 02:36:45 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 02E2ajF9076680; Sat, 14 Mar 2020 02:36:45 GMT (envelope-from imp@FreeBSD.org) Message-Id: <202003140236.02E2ajF9076680@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Sat, 14 Mar 2020 02:36:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r358987 - head/sys/cam X-SVN-Group: head X-SVN-Commit-Author: imp X-SVN-Commit-Paths: head/sys/cam X-SVN-Commit-Revision: 358987 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Mar 2020 02:36:47 -0000 Author: imp Date: Sat Mar 14 02:36:45 2020 New Revision: 358987 URL: https://svnweb.freebsd.org/changeset/base/358987 Log: Add comment about how the deferred callback for AC_FOUND_DEVICE we generate for a race where a device goes away, we start to tear down the periph state for the device, and then the device suddently reappears. The key that makes it work is removal of periph from the drv list before calling the deferred callback. Hat tip to: mav@ Modified: head/sys/cam/cam_periph.c Modified: head/sys/cam/cam_periph.c ============================================================================== --- head/sys/cam/cam_periph.c Sat Mar 14 02:24:11 2020 (r358986) +++ head/sys/cam/cam_periph.c Sat Mar 14 02:36:45 2020 (r358987) @@ -729,7 +729,9 @@ camperiphfree(struct cam_periph *periph) periph->periph_dtor(periph); /* - * The peripheral list is protected by the topology lock. + * The peripheral list is protected by the topology lock. We have to + * remove the periph from the drv list before we call deferred_ac. The + * AC_FOUND_DEVICE callback won't create a new periph if it's still there. */ xpt_lock_buses();