diff options
Diffstat (limited to 'storage/innobase/buf/buf0rea.cc')
-rw-r--r-- | storage/innobase/buf/buf0rea.cc | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc index 227cb083725..3a579e251ff 100644 --- a/storage/innobase/buf/buf0rea.cc +++ b/storage/innobase/buf/buf0rea.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -61,7 +61,7 @@ buf_read_page_handle_error( buf_page_t* bpage) /*!< in: pointer to the block */ { buf_pool_t* buf_pool = buf_pool_from_bpage(bpage); - const ibool uncompressed = (buf_page_get_state(bpage) + const bool uncompressed = (buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE); /* First unfix and release lock on the bpage */ @@ -79,13 +79,14 @@ buf_read_page_handle_error( BUF_IO_READ); } + mutex_exit(buf_page_get_mutex(bpage)); + /* remove the block from LRU list */ buf_LRU_free_one_page(bpage); ut_ad(buf_pool->n_pend_reads > 0); buf_pool->n_pend_reads--; - mutex_exit(buf_page_get_mutex(bpage)); buf_pool_mutex_exit(buf_pool); } @@ -103,7 +104,7 @@ static ulint buf_read_page_low( /*==============*/ - ulint* err, /*!< out: DB_SUCCESS or DB_TABLESPACE_DELETED if we are + dberr_t* err, /*!< out: DB_SUCCESS or DB_TABLESPACE_DELETED if we are trying to read from a non-existent tablespace, or a tablespace which is just now being dropped */ ibool sync, /*!< in: TRUE if synchronous aio is desired */ @@ -192,13 +193,9 @@ buf_read_page_low( } thd_wait_end(NULL); - if (*err == DB_TABLESPACE_DELETED) { - buf_read_page_handle_error(bpage); - return(0); - } - if (*err != DB_SUCCESS) { - if (ignore_nonexistent_pages) { + if (ignore_nonexistent_pages || *err == DB_TABLESPACE_DELETED) { + buf_read_page_handle_error(bpage); return(0); } /* else */ @@ -248,7 +245,7 @@ buf_read_ahead_random( ulint ibuf_mode; ulint count; ulint low, high; - ulint err; + dberr_t err; ulint i; const ulint buf_read_ahead_random_area = BUF_READ_AHEAD_AREA(buf_pool); @@ -377,7 +374,7 @@ read_ahead: buf_LRU_stat_inc_io(); buf_pool->stat.n_ra_pages_read_rnd += count; - srv_buf_pool_reads += count; + srv_stats.buf_pool_reads.add(count); return(count); } @@ -397,7 +394,7 @@ buf_read_page( { ib_int64_t tablespace_version; ulint count; - ulint err; + dberr_t err; tablespace_version = fil_space_get_version(space); @@ -407,7 +404,7 @@ buf_read_page( count = buf_read_page_low(&err, TRUE, BUF_READ_ANY_PAGE, space, zip_size, FALSE, tablespace_version, offset); - srv_buf_pool_reads += count; + srv_stats.buf_pool_reads.add(count); if (err == DB_TABLESPACE_DELETED) { ut_print_timestamp(stderr); fprintf(stderr, @@ -440,7 +437,7 @@ buf_read_page_async( ulint zip_size; ib_int64_t tablespace_version; ulint count; - ulint err; + dberr_t err; zip_size = fil_space_get_zip_size(space); @@ -455,7 +452,7 @@ buf_read_page_async( | BUF_READ_IGNORE_NONEXISTENT_PAGES, space, zip_size, FALSE, tablespace_version, offset); - srv_buf_pool_reads += count; + srv_stats.buf_pool_reads.add(count); /* We do not increment number of I/O operations used for LRU policy here (buf_LRU_stat_inc_io()). We use this in heuristics to decide @@ -513,7 +510,7 @@ buf_read_ahead_linear( ulint fail_count; ulint ibuf_mode; ulint low, high; - ulint err; + dberr_t err; ulint i; const ulint buf_read_ahead_linear_area = BUF_READ_AHEAD_AREA(buf_pool); @@ -784,7 +781,7 @@ buf_read_ibuf_merge_pages( #endif for (i = 0; i < n_stored; i++) { - ulint err; + dberr_t err; buf_pool_t* buf_pool; ulint zip_size = fil_space_get_zip_size(space_ids[i]); @@ -850,7 +847,7 @@ buf_read_recv_pages( { ib_int64_t tablespace_version; ulint count; - ulint err; + dberr_t err; ulint i; zip_size = fil_space_get_zip_size(space); |