Loading innobase/os/os0file.c +38 −25 Original line number Diff line number Diff line Loading @@ -3613,6 +3613,37 @@ os_aio_posix_handle( } #endif /************************************************************************** Do a 'last millisecond' check that the page end is sensible; reported page checksum errors from Linux seem to wipe over the page end. */ static void os_file_check_page_trailers( /*========================*/ byte* combined_buf, /* in: combined write buffer */ ulint total_len) /* in: size of combined_buf, in bytes (a multiple of UNIV_PAGE_SIZE) */ { ulint len; for (len = 0; len + UNIV_PAGE_SIZE <= total_len; len += UNIV_PAGE_SIZE) { byte* buf = combined_buf + len; if (memcmp(buf + (FIL_PAGE_LSN + 4), buf + (UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4), 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: Writing a block of %lu bytes, currently at offset %lu\n", (ulong)total_len, (ulong)len); buf_page_print(buf); fprintf(stderr, "InnoDB: ERROR: The page to be written seems corrupt!\n"); } } } /************************************************************************** Does simulated aio. This function should be called by an i/o-handler thread. */ Loading Loading @@ -3650,7 +3681,6 @@ os_aio_simulated_handle( ibool ret; ulint n; ulint i; ulint len2; segment = os_aio_get_array_and_local_segment(&array, global_segment); Loading Loading @@ -3858,32 +3888,15 @@ os_aio_simulated_handle( ut_error; } /* Do a 'last millisecond' check that the page end is sensible; reported page checksum errors from Linux seem to wipe over the page end */ for (len2 = 0; len2 + UNIV_PAGE_SIZE <= total_len; len2 += UNIV_PAGE_SIZE) { if (mach_read_from_4(combined_buf + len2 + FIL_PAGE_LSN + 4) != mach_read_from_4(combined_buf + len2 + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n"); fprintf(stderr, "InnoDB: Writing a block of %lu bytes, currently writing at offset %lu\n", (ulong)total_len, (ulong)len2); buf_page_print(combined_buf + len2); fprintf(stderr, "InnoDB: ERROR: The page to be written seems corrupt!\n"); } } os_file_check_page_trailers(combined_buf, total_len); } ret = os_file_write(slot->name, slot->file, combined_buf, slot->offset, slot->offset_high, total_len); if (array == os_aio_write_array) { os_file_check_page_trailers(combined_buf, total_len); } } else { ret = os_file_read(slot->file, combined_buf, slot->offset, slot->offset_high, total_len); Loading sql/ha_innodb.cc +2 −0 Original line number Diff line number Diff line Loading @@ -3431,6 +3431,8 @@ ha_innobase::index_prev( mysql_byte* buf) /* in/out: buffer for previous row in MySQL format */ { statistic_increment(ha_read_prev_count, &LOCK_status); return(general_fetch(buf, ROW_SEL_PREV, 0)); } Loading Loading
innobase/os/os0file.c +38 −25 Original line number Diff line number Diff line Loading @@ -3613,6 +3613,37 @@ os_aio_posix_handle( } #endif /************************************************************************** Do a 'last millisecond' check that the page end is sensible; reported page checksum errors from Linux seem to wipe over the page end. */ static void os_file_check_page_trailers( /*========================*/ byte* combined_buf, /* in: combined write buffer */ ulint total_len) /* in: size of combined_buf, in bytes (a multiple of UNIV_PAGE_SIZE) */ { ulint len; for (len = 0; len + UNIV_PAGE_SIZE <= total_len; len += UNIV_PAGE_SIZE) { byte* buf = combined_buf + len; if (memcmp(buf + (FIL_PAGE_LSN + 4), buf + (UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4), 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n" "InnoDB: Writing a block of %lu bytes, currently at offset %lu\n", (ulong)total_len, (ulong)len); buf_page_print(buf); fprintf(stderr, "InnoDB: ERROR: The page to be written seems corrupt!\n"); } } } /************************************************************************** Does simulated aio. This function should be called by an i/o-handler thread. */ Loading Loading @@ -3650,7 +3681,6 @@ os_aio_simulated_handle( ibool ret; ulint n; ulint i; ulint len2; segment = os_aio_get_array_and_local_segment(&array, global_segment); Loading Loading @@ -3858,32 +3888,15 @@ os_aio_simulated_handle( ut_error; } /* Do a 'last millisecond' check that the page end is sensible; reported page checksum errors from Linux seem to wipe over the page end */ for (len2 = 0; len2 + UNIV_PAGE_SIZE <= total_len; len2 += UNIV_PAGE_SIZE) { if (mach_read_from_4(combined_buf + len2 + FIL_PAGE_LSN + 4) != mach_read_from_4(combined_buf + len2 + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM + 4)) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: ERROR: The page to be written seems corrupt!\n"); fprintf(stderr, "InnoDB: Writing a block of %lu bytes, currently writing at offset %lu\n", (ulong)total_len, (ulong)len2); buf_page_print(combined_buf + len2); fprintf(stderr, "InnoDB: ERROR: The page to be written seems corrupt!\n"); } } os_file_check_page_trailers(combined_buf, total_len); } ret = os_file_write(slot->name, slot->file, combined_buf, slot->offset, slot->offset_high, total_len); if (array == os_aio_write_array) { os_file_check_page_trailers(combined_buf, total_len); } } else { ret = os_file_read(slot->file, combined_buf, slot->offset, slot->offset_high, total_len); Loading
sql/ha_innodb.cc +2 −0 Original line number Diff line number Diff line Loading @@ -3431,6 +3431,8 @@ ha_innobase::index_prev( mysql_byte* buf) /* in/out: buffer for previous row in MySQL format */ { statistic_increment(ha_read_prev_count, &LOCK_status); return(general_fetch(buf, ROW_SEL_PREV, 0)); } Loading