It appears the problem is due to the following:

TROVE_ds_position *inout_position_p - sizeof (*inout_position_p) = 8
*(db_recno_t *)key.data = *(db_recno_t *)inout_position_p; -> 
sizeof(db_recno_t) = 4

*inout_position_p = 0x00000000 0x00000001
*key.data = 0x00000000

Just to confirm I put in the following:

fprintf(stderr,"sizeof(db_recno_t): %d sizeof(*inout_position_p): %d 
*inout_position_p: %d *(db_recno_t *)inout_position_p: %d inout_position_p: %p 
(%016llx)\n",
sizeof(db_recno_t),sizeof(*inout_position_p),*inout_position_p,*(db_recno_t 
*)inout_position_p,inout_position_p,*inout_position_p);

And got:

sizeof(db_recno_t): 4 sizeof(*inout_position_p): 8 *inout_position_p: 1 
*(db_recno_t *)inout_position_p: 0 inout_position_p: 0x3ffffdc0d88 
(0000000000000001)

The code generated for *(db_recno_t *)key.data = *(db_recno_t *) 
inout_position_p; is

       lg      %r1,256(%r15)   - destination pointer
       lg      %r2,184(%r15)  - source pointer
       l       %r2,0(%r2)           - get 1st 32-bits of the 64-bit field
       st      %r2,0(%r1)          - store in destination

Changing the statement to

*(db_recno_t *)key.data = (db_recno_t) *inout_position_p;

Fixes the problem. I’ll scan for similar statements.

Neale
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to