CAPS bug

Dave Leimbach leimySPAM2k at
Sun Apr 25 23:38:47 PDT 2004

I can't send a message larger than 128K

Hiten helped me find it.  I have a test that showed it and fought me all day.

include/param.h:119:#define MAXPHYS             (128 * 1024)    /* max raw I/O t

XIO_INTERNAL_PAGES is MAXPHYS and "xio_init_ubuf" is using it as the upper
limit on a for loop :).  

Apparently there is an error but it never makes it back to the user 
because caps_load_ccr is called which calls xio_init_ubuf unchecked.

In this case it's failing as I am sending 128K+1 bytes and I had no way to 
know about it at the user level.

The test I used is a simple server that waits for 2 messages...  The client
connects to it and sends the atoi of argv[1] as the "length to expect" for
the second message.  Then it mallocs and memsets the values to "1" in the 
contiguous buffer I allocate.  It then caps_sys_put's this buffer and is 
always successful.

The server side checks for the 1s and has been failing at the 128K+1 bit.

This might be a good test for /usr/src/test/caps btw.  I'd like to clean it
up and submit it if you are interested.

Also I am trying my hand at diagraming the behavior of CAPS and a typical
client/server connect/put situation.  I don't know where that will be published
but I hope to get it out to the dragonfly community as the #dfinstaller 
folks might be able to refer to it.

I am also working on a little walkthrough paper (just started the outline
tonight) for CAPS system call interface.  I hope to make progress before
I move in a few weeks to Seattle [ a 4 day drive ].  It will take a while
for me to get back in gear then.


More information about the Bugs mailing list