Loading storage/ndb/src/kernel/blocks/tsman.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -1844,6 +1844,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) ndbrequire(m_file_hash.find(file_ptr, file_key)); struct req val = lookup_extent(req.key.m_page_no, file_ptr.p); Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val); Page_cache_client::Request preq; preq.m_page.m_page_no = val.m_extent_page_no; Loading @@ -1869,7 +1870,6 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) ndbrequire(header->m_table == req.request.table_id); Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val); Uint32 word = header->get_free_word_offset(page_no_in_extent); Uint32 shift = SZ * (page_no_in_extent & 7); Loading Loading @@ -1929,8 +1929,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) found: header->update_free_bits(page_no, src_bits | UNCOMMITTED_MASK); rep->bits= (src_bits & UNCOMMITTED_MASK) >> UNCOMMITTED_SHIFT; rep->key.m_page_no= val.m_extent_pages + val.m_extent_no * val.m_extent_size + page_no; rep->key.m_page_no = req.key.m_page_no + page_no - page_no_in_extent; rep->reply.errorCode= 0; return; } Loading storage/ndb/src/kernel/vm/RWPool.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ RWPool::RWPool() { bzero(this, sizeof(* this)); m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = REC_NIL; m_first_free_page = RNIL; } Loading Loading @@ -57,7 +57,7 @@ RWPool::seize(Ptr<void>& ptr) m_current_first_free = pageP->m_data[pos+m_record_info.m_offset_next_pool]; return true; } else if (pos + size < GLOBAL_PAGE_SIZE_WORDS) else if (pos + size < RWPage::RWPAGE_WORDS) { seize_first: ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos; Loading @@ -81,11 +81,14 @@ RWPool::seize(Ptr<void>& ptr) { pageP = m_current_page = m_memroot + m_first_free_page; m_current_page_no = m_first_free_page; m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = m_current_page->m_first_free; m_first_free_page = m_current_page->m_next_page; m_current_ref_count = m_current_page->m_ref_count; if (m_first_free_page != RNIL) { (m_memroot + m_first_free_page)->m_prev_page = RNIL; } goto seize_free; } Loading @@ -105,7 +108,7 @@ RWPool::seize(Ptr<void>& ptr) m_current_page = 0; m_current_page_no = RNIL; m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = REC_NIL; return false; Loading Loading @@ -154,6 +157,7 @@ RWPool::release(Ptr<void> ptr) } page->m_next_page = ffp; page->m_prev_page = RNIL; m_first_free_page = ptr_page; return; } else if(ref_cnt == 1) Loading storage/ndb/src/kernel/vm/RWPool.hpp +3 −1 Original line number Diff line number Diff line Loading @@ -20,12 +20,14 @@ struct RWPage { STATIC_CONST( RWPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 4 ); Uint32 m_type_id; Uint16 m_first_free; Uint16 m_ref_count; Uint32 m_next_page; Uint32 m_prev_page; Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 4]; Uint32 m_data[RWPAGE_WORDS]; }; /** Loading storage/ndb/src/kernel/vm/WOPool.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ WOPool::WOPool() { bzero(this, sizeof(* this)); m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = WOPage::WOPAGE_WORDS; } void Loading storage/ndb/src/kernel/vm/WOPool.hpp +4 −2 Original line number Diff line number Diff line Loading @@ -20,9 +20,11 @@ struct WOPage { STATIC_CONST( WOPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 2 ); Uint32 m_type_id; Uint32 m_ref_count; Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 2]; Uint32 m_data[WOPAGE_WORDS]; }; /** Loading Loading @@ -61,7 +63,7 @@ WOPool::seize(Ptr<void>& ptr) Uint32 pos = m_current_pos; Uint32 size = m_record_info.m_size; WOPage *pageP = m_current_page; if (likely(pos + size < GLOBAL_PAGE_SIZE_WORDS)) if (likely(pos + size < WOPage::WOPAGE_WORDS)) { ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos; ptr.p = (pageP->m_data + pos); Loading Loading
storage/ndb/src/kernel/blocks/tsman.cpp +2 −3 Original line number Diff line number Diff line Loading @@ -1844,6 +1844,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) ndbrequire(m_file_hash.find(file_ptr, file_key)); struct req val = lookup_extent(req.key.m_page_no, file_ptr.p); Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val); Page_cache_client::Request preq; preq.m_page.m_page_no = val.m_extent_page_no; Loading @@ -1869,7 +1870,6 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) ndbrequire(header->m_table == req.request.table_id); Uint32 page_no_in_extent = calc_page_no_in_extent(req.key.m_page_no, &val); Uint32 word = header->get_free_word_offset(page_no_in_extent); Uint32 shift = SZ * (page_no_in_extent & 7); Loading Loading @@ -1929,8 +1929,7 @@ Tsman::execALLOC_PAGE_REQ(Signal* signal) found: header->update_free_bits(page_no, src_bits | UNCOMMITTED_MASK); rep->bits= (src_bits & UNCOMMITTED_MASK) >> UNCOMMITTED_SHIFT; rep->key.m_page_no= val.m_extent_pages + val.m_extent_no * val.m_extent_size + page_no; rep->key.m_page_no = req.key.m_page_no + page_no - page_no_in_extent; rep->reply.errorCode= 0; return; } Loading
storage/ndb/src/kernel/vm/RWPool.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ RWPool::RWPool() { bzero(this, sizeof(* this)); m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = REC_NIL; m_first_free_page = RNIL; } Loading Loading @@ -57,7 +57,7 @@ RWPool::seize(Ptr<void>& ptr) m_current_first_free = pageP->m_data[pos+m_record_info.m_offset_next_pool]; return true; } else if (pos + size < GLOBAL_PAGE_SIZE_WORDS) else if (pos + size < RWPage::RWPAGE_WORDS) { seize_first: ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos; Loading @@ -81,11 +81,14 @@ RWPool::seize(Ptr<void>& ptr) { pageP = m_current_page = m_memroot + m_first_free_page; m_current_page_no = m_first_free_page; m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = m_current_page->m_first_free; m_first_free_page = m_current_page->m_next_page; m_current_ref_count = m_current_page->m_ref_count; if (m_first_free_page != RNIL) { (m_memroot + m_first_free_page)->m_prev_page = RNIL; } goto seize_free; } Loading @@ -105,7 +108,7 @@ RWPool::seize(Ptr<void>& ptr) m_current_page = 0; m_current_page_no = RNIL; m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = RWPage::RWPAGE_WORDS; m_current_first_free = REC_NIL; return false; Loading Loading @@ -154,6 +157,7 @@ RWPool::release(Ptr<void> ptr) } page->m_next_page = ffp; page->m_prev_page = RNIL; m_first_free_page = ptr_page; return; } else if(ref_cnt == 1) Loading
storage/ndb/src/kernel/vm/RWPool.hpp +3 −1 Original line number Diff line number Diff line Loading @@ -20,12 +20,14 @@ struct RWPage { STATIC_CONST( RWPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 4 ); Uint32 m_type_id; Uint16 m_first_free; Uint16 m_ref_count; Uint32 m_next_page; Uint32 m_prev_page; Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 4]; Uint32 m_data[RWPAGE_WORDS]; }; /** Loading
storage/ndb/src/kernel/vm/WOPool.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ WOPool::WOPool() { bzero(this, sizeof(* this)); m_current_pos = GLOBAL_PAGE_SIZE_WORDS; m_current_pos = WOPage::WOPAGE_WORDS; } void Loading
storage/ndb/src/kernel/vm/WOPool.hpp +4 −2 Original line number Diff line number Diff line Loading @@ -20,9 +20,11 @@ struct WOPage { STATIC_CONST( WOPAGE_WORDS = GLOBAL_PAGE_SIZE_WORDS - 2 ); Uint32 m_type_id; Uint32 m_ref_count; Uint32 m_data[GLOBAL_PAGE_SIZE_WORDS - 2]; Uint32 m_data[WOPAGE_WORDS]; }; /** Loading Loading @@ -61,7 +63,7 @@ WOPool::seize(Ptr<void>& ptr) Uint32 pos = m_current_pos; Uint32 size = m_record_info.m_size; WOPage *pageP = m_current_page; if (likely(pos + size < GLOBAL_PAGE_SIZE_WORDS)) if (likely(pos + size < WOPage::WOPAGE_WORDS)) { ptr.i = (m_current_page_no << POOL_RECORD_BITS) + pos; ptr.p = (pageP->m_data + pos); Loading