[PVFS2-developers] return of 64 bit and request encode/decode

Robert Latham robl at mcs.anl.gov
Tue Jun 14 17:15:47 EDT 2005


Hi
The terrasoft guys reported a problem with pvfs2 on their ppc64
systems, so they gave me an account.  

I built a 64 bit version of pvfs2-server and pvfs2-cp and the server
segfaults when trying to copy Changelog from unix-land to pvfs2 land.
The segfault looks eeriliy similar to Brian's opteron bug:


Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 549756086192 (LWP 23652)]
0x0000000010066c40 in PINT_Process_request (req=0x1011d840, mem=0x0,
    rfdata=0x1011e780, result=0x101401c8, mode=1)
    at src/io/description/pint-request.c:215

So we print out the usual suspects:

(gdb) p  req->cur[req->lvl].rq
$3 = (PINT_Request *) 0x1011d090
(gdb) p * req->cur[req->lvl].rq
$4 = {offset = 0, num_ereqs = 1, num_blocks = 0, stride = 1, ub = 1, lb = 0, 
  aggregate_size = 1, num_contig_chunks = 1, depth = 1, num_nested_req = 0, 
  committed = -1, refcount = -1, ereq = 0xffffffa81011d090, 
  sreq = 0xffffffa81011d090}

It looks like ereq and sreq are getting ... i dunno... sign extended?
We already, thanks to Pete's suggestion, zero ereq and sreq before
calling decode_uint32_t.  On a whim I tried zeroing it out with '0L'
instead of plain 0 but with no effect.  

Here's a theory: decode_uint32_t calls bmitoh32, which calls htobmi32,
which on WORDS_BIGENDIAN architectures (like ppc64) calls __bswap_32.
Except we have to in this case worry about all 64 bits, not just 32.

I tried making {en,de}code_PVFS_Request call {en,de}code_uint64_t, but
that didn't help anything.  still get what seem to be these
sign-extended (and invalid) pointers.

==rob

-- 
Rob Latham
Mathematics and Computer Science Division    A215 0178 EA2D B059 8CDF
Argonne National Labs, IL USA                B29D F333 664A 4280 315B


More information about the PVFS2-developers mailing list