Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 4 Jul 1998 18:41:17 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        cvs-committers@FreeBSD.ORG, julian@FreeBSD.ORG
Subject:   Re: cvs commit: src/sys/dev/vn vn.c
Message-ID:  <199807040841.SAA31111@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>  Modified files:
>    sys/dev/vn           vn.c 
>  Log:
>  Don't use a struct buf (malloc'd) without first initialising all the fields
>  to some known value!
>  (probable cause of soft updates exploding with vn devices)

Buffers should never be malloced.  There is no way of knowing how to
initialize new fields like b_dep.  geteblk() should always work, but
might be a bit slow.  vfs_cluster.c uses trypbuf().  This is not quite
suitable for vn, since trypbuf() can fail.  This is not quite suitable
for clustering, since trypbuf can fail :-) (it's fairly easy (1) to use
all pbufs doing a singly iozone when the ratio buf/nswbuf is large (2),
and then clustering doesn't cluster).

I don't like mixing bzero() with explicit initialization of all the
necessary fields.  vn previously attempted to initialize them all.
The bzero() bogotifies all the explicit initializations to 0.

(1) The dirty buffers watermarks don't work when there is lots of
    clustering.  Dirty normal buffers are converted to non-dirty
    normal buffers and dirty pbufs, so processes like iozone aren't
    limited by the watermarks until clustering breaks down.

(2) nswbuf is clamped to a fairly small value, while nbuf is clamped
    to a relatively large value.

Bruce

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



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