Subject: Re: kern/32193: vop_strategy gets broken struct buf's passed by genfs/bread, possible memory leakage
To: Reinoud Zandijk <reinoud@netbsd.org>
From: Jason Thorpe <thorpej@shagadelic.org>
List: netbsd-bugs
Date: 11/30/2005 10:35:02
On Nov 30, 2005, at 10:21 AM, Reinoud Zandijk wrote:

> That bp->b_bufsize indicates the length of the datablock pointed to by
> bp->b_data ?

That's not what b_bufsize is for.  b_bcount indicates the length of  
the data pointed to by b_data.

b_bufsize is really almost historical, at this point... it indicates  
the total size of the data area allocated to the buf, not all of  
which contains valid data.  I'm not even clear on the semantics of  
b_bufsize in the New World Order of the dynamically allocated bio cache.

> Consistency. If one wants to be consistent, b_resid ought to allways
> indicate the number of bytes to be transfered independent of the  
> place one
> finds the buf used and not for conventions sake suddenly been taken  
> over by
> b_bcount.

Suddenly?  As long as I can remember (no jokes, please :-):

- b_bcount has indicated the amount that is to be transferred.   
Device drivers read this field to determine how to set up the device  
command.

- b_resid has indicated the amount of data NOT transferred for one  
reason or another.  Device drivers write this field after the device  
command has completed.

-- thorpej