|
@@ -310,6 +310,16 @@ typedef struct xlog_rec_ext_header {
|
|
|
} xlog_rec_ext_header_t;
|
|
|
|
|
|
#ifdef __KERNEL__
|
|
|
+
|
|
|
+/*
|
|
|
+ * Quite misnamed, because this union lays out the actual on-disk log buffer.
|
|
|
+ */
|
|
|
+typedef union xlog_in_core2 {
|
|
|
+ xlog_rec_header_t hic_header;
|
|
|
+ xlog_rec_ext_header_t hic_xheader;
|
|
|
+ char hic_sector[XLOG_HEADER_SIZE];
|
|
|
+} xlog_in_core_2_t;
|
|
|
+
|
|
|
/*
|
|
|
* - A log record header is 512 bytes. There is plenty of room to grow the
|
|
|
* xlog_rec_header_t into the reserved space.
|
|
@@ -339,7 +349,7 @@ typedef struct xlog_rec_ext_header {
|
|
|
* We'll put all the read-only and l_icloglock fields in the first cacheline,
|
|
|
* and move everything else out to subsequent cachelines.
|
|
|
*/
|
|
|
-typedef struct xlog_iclog_fields {
|
|
|
+typedef struct xlog_in_core {
|
|
|
sv_t ic_force_wait;
|
|
|
sv_t ic_write_wait;
|
|
|
struct xlog_in_core *ic_next;
|
|
@@ -362,40 +372,10 @@ typedef struct xlog_iclog_fields {
|
|
|
|
|
|
/* reference counts need their own cacheline */
|
|
|
atomic_t ic_refcnt ____cacheline_aligned_in_smp;
|
|
|
-} xlog_iclog_fields_t;
|
|
|
-
|
|
|
-typedef union xlog_in_core2 {
|
|
|
- xlog_rec_header_t hic_header;
|
|
|
- xlog_rec_ext_header_t hic_xheader;
|
|
|
- char hic_sector[XLOG_HEADER_SIZE];
|
|
|
-} xlog_in_core_2_t;
|
|
|
-
|
|
|
-typedef struct xlog_in_core {
|
|
|
- xlog_iclog_fields_t hic_fields;
|
|
|
- xlog_in_core_2_t *hic_data;
|
|
|
+ xlog_in_core_2_t *ic_data;
|
|
|
+#define ic_header ic_data->hic_header
|
|
|
} xlog_in_core_t;
|
|
|
|
|
|
-/*
|
|
|
- * Defines to save our code from this glop.
|
|
|
- */
|
|
|
-#define ic_force_wait hic_fields.ic_force_wait
|
|
|
-#define ic_write_wait hic_fields.ic_write_wait
|
|
|
-#define ic_next hic_fields.ic_next
|
|
|
-#define ic_prev hic_fields.ic_prev
|
|
|
-#define ic_bp hic_fields.ic_bp
|
|
|
-#define ic_log hic_fields.ic_log
|
|
|
-#define ic_callback hic_fields.ic_callback
|
|
|
-#define ic_callback_lock hic_fields.ic_callback_lock
|
|
|
-#define ic_callback_tail hic_fields.ic_callback_tail
|
|
|
-#define ic_trace hic_fields.ic_trace
|
|
|
-#define ic_size hic_fields.ic_size
|
|
|
-#define ic_offset hic_fields.ic_offset
|
|
|
-#define ic_refcnt hic_fields.ic_refcnt
|
|
|
-#define ic_bwritecnt hic_fields.ic_bwritecnt
|
|
|
-#define ic_state hic_fields.ic_state
|
|
|
-#define ic_datap hic_fields.ic_datap
|
|
|
-#define ic_header hic_data->hic_header
|
|
|
-
|
|
|
/*
|
|
|
* The reservation head lsn is not made up of a cycle number and block number.
|
|
|
* Instead, it uses a cycle number and byte number. Logs don't expect to
|