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