Date: Tue, 10 Dec 2002 13:29:55 -0800 (PST)
From: Nate Lawson <nate@root.org>
To: Yar Tikhiy <yar@FreeBSD.ORG>
Cc: "Kenneth D. Merry" <ken@kdm.org>, freebsd-scsi@FreeBSD.ORG
Subject: Re: {da,sa,...}open bug?
Message-ID: <Pine.BSF.4.21.0212101325030.28346-100000@root.org>
In-Reply-To: <20021210171528.B27181@comp.chem.msu.su>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 10 Dec 2002, Yar Tikhiy wrote:
> On Mon, Dec 09, 2002 at 01:50:14PM -0800, Nate Lawson wrote:
> > NULL check should be moved inside the splsoftcam to ensure exclusive
> > access. In the future, we'll use mutex(9) for implementing lock and
> > acquire.
> >
> > --- /sys/cam/cam_periph.c 14 Nov 2002 05:35:57 -0000 1.43
> > +++ /sys/cam/cam_periph.c 9 Dec 2002 21:38:02 -0000
> > @@ -262,15 +262,17 @@
> > cam_periph_acquire(struct cam_periph *periph)
> > {
> > int s;
> > + cam_status status;
> >
> > - if (periph == NULL)
> > - return(CAM_REQ_CMP_ERR);
> > -
> > + cam_status = CAM_REQ_CMP;
> > s = splsoftcam();
> > - periph->refcount++;
> > + if (periph != NULL)
> > + periph->refcount++;
> > + else
> > + status = CAM_REQ_CMP_ERR;
> > splx(s);
> >
> > - return(CAM_REQ_CMP);
> > + return (status);
> > }
> >
> > void
>
> Excuse me, but I see little reason in this patch. "periph" is a
> function argument, so its value cannot be changed anywhere else,
> so there is no need for splsoftcam() before the NULL check.
I guess this makes sense since it's too late by the point where *periph
has been pushed on the stack and acquire called. My concern was the (very
small) possibility that between the NULL check and refcount++, an
interrupt could happen and free the periph. But my patch does not fix
this, as you point out.
-Nate
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-scsi" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0212101325030.28346-100000>
