svn commit: r186371 - head/sys/cam/scsi

Ganbold ganbold at micom.mng.net
Sun Dec 21 07:22:47 UTC 2008


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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at 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


More information about the svn-src-all mailing list