Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jan 2009 15:21:17 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-current@freebsd.org
Cc:        Roman Divacky <rdivacky@freebsd.org>, scottl@freebsd.org
Subject:   Re: sysctl question
Message-ID:  <200901281521.17674.jhb@freebsd.org>
In-Reply-To: <20090128193318.GA42071@freebsd.org>
References:  <20090128193318.GA42071@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 28 January 2009 2:33:18 pm Roman Divacky wrote:
> hi
> 
> we dont need Giant to be held for sysctl_ctx_init/SYSCTL_ADD_*, right?

Ugh, it looks like the sysctl tree locking is woefully inadequate, so we 
aren't quite ready for this yet.

> if that's true, is this ok for commit?
> 
> Index: cam/scsi/scsi_da.c
> ===================================================================
> --- cam/scsi/scsi_da.c	(revision 187838)
> +++ cam/scsi/scsi_da.c	(working copy)
> @@ -1086,7 +1086,6 @@
>  	snprintf(tmpstr, sizeof(tmpstr), "CAM DA unit %d", periph->unit_number);
>  	snprintf(tmpstr2, sizeof(tmpstr2), "%d", periph->unit_number);
>  
> -	mtx_lock(&Giant);
>  	sysctl_ctx_init(&softc->sysctl_ctx);
>  	softc->flags |= DA_FLAG_SCTX_INIT;
>  	softc->sysctl_tree = SYSCTL_ADD_NODE(&softc->sysctl_ctx,
> @@ -1094,7 +1093,6 @@
>  		CTLFLAG_RD, 0, tmpstr);
>  	if (softc->sysctl_tree == NULL) {
>  		printf("dasysctlinit: unable to allocate sysctl tree\n");
> -		mtx_unlock(&Giant);
>  		cam_periph_release(periph);
>  		return;
>  	}
> @@ -1108,7 +1106,6 @@
>  		&softc->minimum_cmd_size, 0, dacmdsizesysctl, "I",
>  		"Minimum CDB size");
>  
> -	mtx_unlock(&Giant);
>  	cam_periph_release(periph);
>  }
>  
> Index: cam/scsi/scsi_cd.c
> ===================================================================
> --- cam/scsi/scsi_cd.c	(revision 187838)
> +++ cam/scsi/scsi_cd.c	(working copy)
> @@ -555,8 +555,6 @@
>  	snprintf(tmpstr, sizeof(tmpstr), "CAM CD unit %d", periph->unit_number);
>  	snprintf(tmpstr2, sizeof(tmpstr2), "%d", periph->unit_number);
>  
> -	mtx_lock(&Giant);
> -
>  	sysctl_ctx_init(&softc->sysctl_ctx);
>  	softc->flags |= CD_FLAG_SCTX_INIT;
>  	softc->sysctl_tree = SYSCTL_ADD_NODE(&softc->sysctl_ctx,
> @@ -565,7 +563,6 @@
>  
>  	if (softc->sysctl_tree == NULL) {
>  		printf("cdsysctlinit: unable to allocate sysctl tree\n");
> -		mtx_unlock(&Giant);
>  		cam_periph_release(periph);
>  		return;
>  	}
> @@ -579,7 +576,6 @@
>  		&softc->minimum_command_size, 0, cdcmdsizesysctl, "I",
>  		"Minimum CDB size");
>  
> -	mtx_unlock(&Giant);
>  	cam_periph_release(periph);
>  }
>  
> 
> thnx!
> 
>    roman
> 



-- 
John Baldwin



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