kern/130735: [patch] pass M_NOWAIT to the malloc() call inside
cdreaddvdstructure()
Eygene Ryabinkin
rea-fbsd at codelabs.ru
Mon Jan 19 11:30:04 PST 2009
The following reply was made to PR kern/130735; it has been noted by GNATS.
From: Eygene Ryabinkin <rea-fbsd at codelabs.ru>
To: Jaakko Heinonen <jh at saunalahti.fi>
Cc: bug-followup at FreeBSD.org
Subject: Re: kern/130735: [patch] pass M_NOWAIT to the malloc() call inside
cdreaddvdstructure()
Date: Mon, 19 Jan 2009 22:25:28 +0300
--WIyZ46R2i8wDzkSu
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Jakko, good day.
Mon, Jan 19, 2009 at 05:06:47PM +0200, Jaakko Heinonen wrote:
> On 2009-01-19, Eygene Ryabinkin wrote:
> > --- a/sys/cam/scsi/scsi_cd.c
> > +++ b/sys/cam/scsi/scsi_cd.c
> > @@ -4063,7 +4063,7 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
> > }
> >
> > if (length != 0) {
> > - databuf = malloc(length, M_DEVBUF, M_WAITOK | M_ZERO);
> > + databuf = malloc(length, M_DEVBUF, M_NOWAIT | M_ZERO);
> > } else
> > databuf = NULL;
>
> This change doesn't look correct. If you use M_NOWAIT malloc(9) can fail
> and return NULL.
Good catch -- I wasn't aware of it. The attached patch should be
slightly better.
--
Eygene
_ ___ _.--. #
\`.|\..----...-'` `-._.-'_.-'` # Remember that it is hard
/ ' ` , __.--' # to read the on-line manual
)/' _/ \ `-_, / # while single-stepping the kernel.
`-'" `"\_ ,_.-;_.-\_ ', fsc/as #
_.-'_./ {_.' ; / # -- FreeBSD Developers handbook
{_.-``-' {_/ #
--WIyZ46R2i8wDzkSu
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=p
--- sys/cam/scsi/scsi_cd.c.orig 2007-07-21 22:07:45.000000000 +0400
+++ sys/cam/scsi/scsi_cd.c 2009-01-19 22:19:18.000000000 +0300
@@ -4063,7 +4063,11 @@
}
if (length != 0) {
- databuf = malloc(length, M_DEVBUF, M_WAITOK | M_ZERO);
+ databuf = malloc(length, M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (databuf == NULL) {
+ error = ENOMEM;
+ goto bailout;
+ }
} else
databuf = NULL;
--WIyZ46R2i8wDzkSu--
More information about the freebsd-scsi
mailing list