Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jan 1999 16:29:38 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Matthew Jacob <mjacob@feral.com>
Cc:        Julian Elischer <julian@whistle.com>, freebsd-hackers@FreeBSD.ORG
Subject:   Re: what is the meaning of this useless code?
Message-ID:  <199901120029.QAA98242@apollo.backplane.com>

next in thread | raw e-mail | index | archive | help

:> On Mon, 11 Jan 1999, Matthew Jacob wrote:
:> >         if (resid > maxio)
:> >                 resid = maxio;
:> > 
:> >         return getpbuf();
:> > }
:> > 
:> > why is resid being truyncaated and maxio being set when this has no
:> > effect?
:> 
:> I think resid was originally an agument to getpbuf
:> but mechanical edits have turned it all into a NOP. 
:> Good catch..
:
:Okay.

    This is definitely a junk assignment.

:> However there is a related problem..
:> 
:> the maximum IO size allowed for a device is kept in the 
:> cdevsw entry, which is the WRONG place, because
:> it cannot correctly reflect the case when there are two differnt devices
:> with different limits on the same controller (e.g. two different drives
:> or even two differend controllers on one driver).
:> 
:
:Well, there are a number of limits- some are device specific, some are bus
:specific and some are VM/OS specific. It's a bit confusing which applies
:here.
:
:I'm going to ponder this as time permits. I'm trying to track down a hang
:on alpha with larget I/Os and this led me to try and follow the raw I/O
:path which led to this...

    The (struct buf *)->b_pages[] array is limited to MAXPHYS bytes worth 
    of pages, where MAXPHYS is typically 128 KBytes.  If you try to stuff
    a struct buf with more then that, you will overrun the array and bad
    things will happen.

    Make sure the devices properly limit the size of the I/O operation they
    try to stuff into a struct buf.  This is just one of several limits, as
    you know.

    d_maxio could probably be removed from the kernel entirely with a little
    work.   I wouldn't worry about it too much, all that really matters is
    that the value is large enough such that the transaction rate does not 
    overburden the device.  For a hard disk, anything over 8KBytes tends
    to accomplish this.

						-Matt

    Matthew Dillon  Engineering, HiWay Technologies, Inc. & BEST Internet 
                    Communications & God knows what else.
    <dillon@backplane.com> (Please include original email in any response)    

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



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