Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 21 Dec 2008 15:22:44 +0800
From:      Ganbold <ganbold@micom.mng.net>
To:        Scott Long <scottl@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r186371 - head/sys/cam/scsi
Message-ID:  <494DEEC4.4010902@micom.mng.net>
In-Reply-To: <200812210620.mBL6KBUC025421@svn.freebsd.org>
References:  <200812210620.mBL6KBUC025421@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Scott Long wrote:
> Author: scottl
> Date: Sun Dec 21 06:20:11 2008
> New Revision: 186371
> URL: http://svn.freebsd.org/changeset/base/186371
>
> Log:
>   Fix refcount locking in cd, pass, and sg periphs.
>
> Modified:
>   head/sys/cam/scsi/scsi_cd.c
>   head/sys/cam/scsi/scsi_pass.c
>   head/sys/cam/scsi/scsi_sg.c
>
> Modified: head/sys/cam/scsi/scsi_cd.c
> ==============================================================================
> --- head/sys/cam/scsi/scsi_cd.c	Sun Dec 21 04:40:02 2008	(r186370)
> +++ head/sys/cam/scsi/scsi_cd.c	Sun Dec 21 06:20:11 2008	(r186371)
> @@ -996,12 +996,6 @@ cdopen(struct disk *dp)
>  		return (error);
>  	}
>  
> -	/* Closes aren't symmetrical with opens, so fix up the refcounting. */
> -	if (softc->flags & CD_FLAG_OPEN)
> -		cam_periph_release(periph);
> -	else
> -		softc->flags |= CD_FLAG_OPEN;
> -
>  	/*
>  	 * Check for media, and set the appropriate flags.  We don't bail
>  	 * if we don't have media, but then we don't allow anything but the
> @@ -1011,7 +1005,15 @@ cdopen(struct disk *dp)
>  
>  	CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("leaving cdopen\n"));
>  	cam_periph_unhold(periph);
> -	cam_periph_unlock(periph);
> +
> +	/* Closes aren't symmetrical with opens, so fix up the refcounting. */
> +	if ((softc->flags & CD_FLAG_OPEN) == 0) {
> +		softc->flags |= CD_FLAG_OPEN;
> +		cam_periph_unlock(periph);
> +	} else {
> +		cam_periph_unlock(periph);
> +		cam_periph_release(periph);
> +	}
>  
>  	return (0);
>  }
>
> Modified: head/sys/cam/scsi/scsi_pass.c
> ==============================================================================
> --- head/sys/cam/scsi/scsi_pass.c	Sun Dec 21 04:40:02 2008	(r186370)
> +++ head/sys/cam/scsi/scsi_pass.c	Sun Dec 21 06:20:11 2008	(r186371)
> @@ -346,13 +346,13 @@ passopen(struct cdev *dev, int flags, in
>  
>  	if ((softc->flags & PASS_FLAG_OPEN) == 0) {
>  		softc->flags |= PASS_FLAG_OPEN;
> +		cam_periph_unlock(periph);
>  	} else {
>  		/* Device closes aren't symmertical, so fix up the refcount */
> +		cam_periph_unlock(periph);
>  		cam_periph_release(periph);
>  	}
>  
> -	cam_periph_unlock(periph);
> -
>  	return (error);
>  }
>  
>
> Modified: head/sys/cam/scsi/scsi_sg.c
> ==============================================================================
> --- head/sys/cam/scsi/scsi_sg.c	Sun Dec 21 04:40:02 2008	(r186370)
> +++ head/sys/cam/scsi/scsi_sg.c	Sun Dec 21 06:20:11 2008	(r186371)
> @@ -399,13 +399,13 @@ sgopen(struct cdev *dev, int flags, int 
>  
>  	if ((softc->flags & SG_FLAG_OPEN) == 0) {
>  		softc->flags |= SG_FLAG_OPEN;
> +		cam_periph_unlock(periph);
>  	} else {
>  		/* Device closes aren't symmetrical, fix up the refcount. */
> +		cam_periph_unlock(periph);
>  		cam_periph_release(periph);
>  	}
>  
> -	cam_periph_unlock(periph);
> -
>  	return (error);
>  }
>  
> _______________________________________________
> svn-src-all@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
>
>   

Thanks a lot.

Ganbold

>
>   


-- 
Writing is easy; all you do is sit staring at the blank sheet of paper
until drops of blood form on your forehead. -- Gene Fowler



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