Could this become a uint64_t instead of a structure within a union? We could bit-shift the two 32 bit values in and out - since access is always through __wt_ref_key and __wt_ref_key_onpage_set it doesn't add much code complexity.
The advantages are:
 * It removes the struct embedded in a union which makes my head hurt a bit.
 * It means that the check for instantiated/on page is simpler (and not as subject to understanding how the compiler lays out structures)
 * It removes the little-endian dependency.

 The change would be something like:
```
--- a/src/include/btmem.h
+++ b/src/include/btmem.h
@@ -421,10 +421,7 @@ struct __wt_ref {
        union {
                uint64_t recno;         /* Column-store: starting recno */
                void    *ikey;          /* Row-store: instantiated key */
                uint64_t recno;         /* Column-store: starting recno */
                void    *ikey;          /* Row-store: instantiated key */
-               struct {                /* Row-store: on-page key */
-                       uint32_t offset;
-                       uint32_t size;
-               } page;
+               uint64_t pkey_info;     /* Row-store: on-page key */
        } key;
 
        uint64_t txnid;                 /* Transaction ID */
diff --git a/src/include/btree.i b/src/include/btree.i
index df90d09..382efe5 100644
--- a/src/include/btree.i
+++ b/src/include/btree.i
@@ -359,8 +359,6 @@ __wt_off_page(WT_PAGE *page, const void *p)
 static inline void
 __wt_ref_key(WT_PAGE *page, WT_REF *ref, void *keyp, uint32_t *sizep)
 {
-       uint32_t offset;
-
        /*
         * An internal page key is in one of two places: if we instantiated the
         * key (for example, when reading the page), WT_REF.key.ikey references
@@ -377,10 +375,10 @@ __wt_ref_key(WT_PAGE *page, WT_REF *ref, void *keyp, uint3
         * the WT_REF.key.page.{offset,len} fields, and there's no reason to do
         * that (and just in case, we verify it as part of the build process).
         */
-       offset = ref->key.page.offset;
-       if (offset & 0x01) {
-               *(void **)keyp = WT_PAGE_REF_OFFSET(page, offset >> 1);
-               *sizep = ref->key.page.size;
+       if (ref->key.pkey_info & 0x01) {
+               *(void **)keyp = WT_PAGE_REF_OFFSET(
+                   page, (ref->key.pkey_info & 0xFFFFFFFF) >> 1);
+               *sizep = (uint32_t)(ref->key.pkey_info >> 32);
        } else {
                *(void **)keyp = WT_IKEY_DATA(ref->key.ikey);
                *sizep = ((WT_IKEY *)ref->key.ikey)->size;
@@ -394,12 +392,13 @@ __wt_ref_key(WT_PAGE *page, WT_REF *ref, void *keyp, uint3
 static inline void
 __wt_ref_key_onpage_set(WT_PAGE *page, WT_REF *ref, WT_CELL_UNPACK *unpack)
 {
+       uint32_t offset;
+
        /*
         * See the comment in __wt_ref_key for an explanation of the magic.
         */
-       ref->key.page.offset =
-           (WT_PAGE_DISK_OFFSET(page, unpack->data) << 1) | 0x01;
-       ref->key.page.size = unpack->size;
+       offset = (WT_PAGE_DISK_OFFSET(page, unpack->data) << 1) | 0x01;
+       ref->key.pkey_info = ((uint64_t)unpack->size << 32) + offset;
 }
 
 /*
@@ -412,7 +411,7 @@ __wt_ref_key_instantiated(WT_REF *ref)
        /*
         * See the comment in __wt_ref_key for an explanation of the magic.
         */
-       return (ref->key.page.offset & 0x01 ? NULL : ref->key.ikey);
+       return (ref->key.pkey_info & 0x01 ? NULL : ref->key.ikey);
 }
 
 /*
```