Stewart Forster <slf@connect.com.au> writes:
> > The client side asks to fill a 4KB buffer:
> > 
> > 	1998/02/24 23:56:26| storeClientCopy: 3AB79EC8F47EF63C16B971700C7CF709,
> > 	seen 0, want 0, size 4096, cb 0x80551c0, cbdata 0x840a600
> > 
> > But aiops.c actually reads 8KB
> > 
> > 	1998/02/24 23:56:26| READ on fd: 22
> > 	1998/02/24 23:56:26| DONE: 8192 -> 4
> 	The ASYNC library simply passes the variables its being given onto
> the read() call.  There may be final corruption on the end result, but some
> where 4096 is being turned into 8192, and it sure isn't in the aiops.c or
> async_io.c code.  I'll take a dig.
The problem is in storeClientFileRead() which totally ignores the size
passed in the 'sc' struct built by storeClientCopy(), and reads
a DISK_PAGE_SIZE.
static void
storeClientFileRead(store_client * sc)
{
    MemObject *mem = sc->entry->mem_obj;
    assert(sc->callback != NULL);
    if (mem->swap_hdr_sz == 0)
        file_read(sc->swapin_fd,
            memAllocate(MEM_DISK_BUF, 1),
            DISK_PAGE_SIZE,        <-------------- this is the problem
                                        as far as I can see. Should be
                                        sc->copy_size here.
            0,
            storeClientReadHeader,
            sc);
    else
[ ... ]
Received on Tue Jul 29 2003 - 13:15:47 MDT
This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:11:43 MST