Wow, great spot! Is this around line 1546 of
src/io/trove/trove-dbpf/dbpf-mgmt.c or somewhere else I'm not seeing?

Thanks,
Michael

On Mon, Aug 22, 2011 at 2:30 PM, Neale Ferguson <[email protected]>wrote:

>  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
>
>
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to