trans->nr_updates2              = 0;
        trans->mem_top                  = 0;
 
+       trans->extra_journal_entries    = NULL;
+       trans->extra_journal_entry_u64s = 0;
+
        if (trans->fs_usage_deltas) {
                trans->fs_usage_deltas->used = 0;
                memset((void *) trans->fs_usage_deltas +
 
        struct btree_insert_entry *updates2;
 
        /* update path: */
+       struct jset_entry       *extra_journal_entries;
+       unsigned                extra_journal_entry_u64s;
+
        struct journal_res      journal_res;
        struct journal_preres   journal_preres;
        u64                     *journal_seq;
 
                        goto err;
        }
 
+       if (unlikely(trans->extra_journal_entry_u64s)) {
+               memcpy_u64s_small(bch2_journal_reservation_entry(&c->journal,
+                                                                &trans->journal_res),
+                                 trans->extra_journal_entries,
+                                 trans->extra_journal_entry_u64s);
+
+               trans->journal_res.offset       += trans->extra_journal_entry_u64s;
+               trans->journal_res.u64s         -= trans->extra_journal_entry_u64s;
+       }
+
        /*
         * Not allowed to fail after we've gotten our journal reservation - we
         * have to use it:
 
        memset(&trans->journal_preres, 0, sizeof(trans->journal_preres));
 
-       trans->journal_u64s             = 0;
+       trans->journal_u64s             = trans->extra_journal_entry_u64s;
        trans->journal_preres_u64s      = 0;
 
        if (!(trans->flags & BTREE_INSERT_NOCHECK_RW) &&
 
        return entry;
 }
 
+static inline struct jset_entry *
+bch2_journal_reservation_entry(struct journal *j, struct journal_res *res)
+{
+       return vstruct_idx(j->buf[res->idx].data, res->offset);
+}
+
 static inline void bch2_journal_add_entry(struct journal *j, struct journal_res *res,
                                          unsigned type, enum btree_id id,
                                          unsigned level,
                                          const void *data, unsigned u64s)
 {
-       struct journal_buf *buf = &j->buf[res->idx];
-       struct jset_entry *entry = vstruct_idx(buf->data, res->offset);
+       struct jset_entry *entry = bch2_journal_reservation_entry(j, res);
        unsigned actual = jset_u64s(u64s);
 
        EBUG_ON(!res->ref);
        entry->pad[0]   = 0;
        entry->pad[1]   = 0;
        entry->pad[2]   = 0;
-       memcpy_u64s(entry->_data, data, u64s);
+       memcpy_u64s_small(entry->_data, data, u64s);
 }
 
 static inline void bch2_journal_add_keys(struct journal *j, struct journal_res *res,