~stewart/haildb/historical

« back to all changes in this revision

Viewing changes to fsp/fsp0fsp.c

  • Committer: Stewart Smith
  • Date: 2010-04-14 16:56:25 UTC
  • Revision ID: stewart@flamingspork.com-20100414165625-r2vj10c0er8ogtsn
innodb plugin 1.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
345
345
 
346
346
        block = buf_page_get(id, zip_size, 0, RW_X_LATCH, mtr);
347
347
        header = FSP_HEADER_OFFSET + buf_block_get_frame(block);
348
 
#ifdef UNIV_SYNC_DEBUG
349
348
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
350
 
#endif /* UNIV_SYNC_DEBUG */
 
349
 
351
350
        ut_ad(id == mach_read_from_4(FSP_SPACE_ID + header));
352
351
        ut_ad(zip_size == dict_table_flags_to_zip_size(
353
352
                      mach_read_from_4(FSP_SPACE_FLAGS + header)));
700
699
                                MTR_MEMO_X_LOCK));
701
700
        ut_ad(mtr_memo_contains_page(mtr, sp_header, MTR_MEMO_PAGE_S_FIX)
702
701
              || mtr_memo_contains_page(mtr, sp_header, MTR_MEMO_PAGE_X_FIX));
 
702
        ut_ad(page_offset(sp_header) == FSP_HEADER_OFFSET);
703
703
        /* Read free limit and space size */
704
704
        limit = mach_read_from_4(sp_header + FSP_FREE_LIMIT);
705
705
        size  = mach_read_from_4(sp_header + FSP_SIZE);
730
730
 
731
731
                block = buf_page_get(space, zip_size, descr_page_no,
732
732
                                     RW_X_LATCH, mtr);
733
 
#ifdef UNIV_SYNC_DEBUG
734
733
                buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
735
 
#endif /* UNIV_SYNC_DEBUG */
 
734
 
736
735
                descr_page = buf_block_get_frame(block);
737
736
        }
738
737
 
765
764
        fsp_header_t*   sp_header;
766
765
 
767
766
        block = buf_page_get(space, zip_size, 0, RW_X_LATCH, mtr);
768
 
#ifdef UNIV_SYNC_DEBUG
769
767
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
770
 
#endif /* UNIV_SYNC_DEBUG */
 
768
 
771
769
        sp_header = FSP_HEADER_OFFSET + buf_block_get_frame(block);
772
770
        return(xdes_get_descriptor_with_space_hdr(sp_header, space, offset,
773
771
                                                  mtr));
948
946
        zip_size = dict_table_flags_to_zip_size(flags);
949
947
        block = buf_page_create(space, 0, zip_size, mtr);
950
948
        buf_page_get(space, zip_size, 0, RW_X_LATCH, mtr);
951
 
#ifdef UNIV_SYNC_DEBUG
952
949
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
953
 
#endif /* UNIV_SYNC_DEBUG */
954
950
 
955
951
        /* The prior contents of the file page should be ignored */
956
952
 
1316
1312
        mtr_t   ibuf_mtr;
1317
1313
 
1318
1314
        ut_ad(header && mtr);
 
1315
        ut_ad(page_offset(header) == FSP_HEADER_OFFSET);
1319
1316
 
1320
1317
        /* Check if we can fill free list from above the free list limit */
1321
1318
        size = mtr_read_ulint(header + FSP_SIZE, MLOG_4BYTES, mtr);
1380
1377
                                        space, i, zip_size, mtr);
1381
1378
                                buf_page_get(space, zip_size, i,
1382
1379
                                             RW_X_LATCH, mtr);
1383
 
#ifdef UNIV_SYNC_DEBUG
1384
1380
                                buf_block_dbg_add_level(block,
1385
1381
                                                        SYNC_FSP_PAGE);
1386
 
#endif /* UNIV_SYNC_DEBUG */
 
1382
 
1387
1383
                                fsp_init_file_page(block, mtr);
1388
1384
                                mlog_write_ulint(buf_block_get_frame(block)
1389
1385
                                                 + FIL_PAGE_TYPE,
1404
1400
                        buf_page_get(space, zip_size,
1405
1401
                                     i + FSP_IBUF_BITMAP_OFFSET,
1406
1402
                                     RW_X_LATCH, &ibuf_mtr);
1407
 
#ifdef UNIV_SYNC_DEBUG
1408
1403
                        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
1409
 
#endif /* UNIV_SYNC_DEBUG */
 
1404
 
1410
1405
                        fsp_init_file_page(block, &ibuf_mtr);
1411
1406
 
1412
1407
                        ibuf_bitmap_page_init(block, &ibuf_mtr);
1577
1572
        if (free == ULINT_UNDEFINED) {
1578
1573
 
1579
1574
                ut_print_buf(stderr, ((byte*)descr) - 500, 1000);
 
1575
                putc('\n', stderr);
1580
1576
 
1581
1577
                ut_error;
1582
1578
        }
1636
1632
        buf_page_create(space, page_no, zip_size, mtr);
1637
1633
 
1638
1634
        block = buf_page_get(space, zip_size, page_no, RW_X_LATCH, mtr);
1639
 
#ifdef UNIV_SYNC_DEBUG
1640
1635
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
1641
 
#endif /* UNIV_SYNC_DEBUG */
1642
1636
 
1643
1637
        /* Prior contents of the page should be ignored */
1644
1638
        fsp_init_file_page(block, mtr);
1760
1754
        if (xdes_get_state(descr, mtr) == XDES_FREE) {
1761
1755
 
1762
1756
                ut_print_buf(stderr, (byte*)descr - 500, 1000);
 
1757
                putc('\n', stderr);
1763
1758
 
1764
1759
                ut_error;
1765
1760
        }
1867
1862
        ulint           zip_size;
1868
1863
        ulint           i;
1869
1864
 
 
1865
        ut_ad(page_offset(space_header) == FSP_HEADER_OFFSET);
 
1866
 
1870
1867
        space = page_get_space_id(page_align(space_header));
1871
1868
        zip_size = dict_table_flags_to_zip_size(
1872
1869
                mach_read_from_4(FSP_SPACE_FLAGS + space_header));
1879
1876
        }
1880
1877
 
1881
1878
        block = buf_page_get(space, zip_size, page_no, RW_X_LATCH, mtr);
1882
 
#ifdef UNIV_SYNC_DEBUG
1883
1879
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
1884
 
#endif /* UNIV_SYNC_DEBUG */
1885
1880
 
1886
1881
        block->check_index_page_at_flush = FALSE;
1887
1882
 
1922
1917
        ulint           zip_size;
1923
1918
        ulint           n;
1924
1919
 
 
1920
        ut_ad(page_offset(space_header) == FSP_HEADER_OFFSET);
 
1921
 
1925
1922
        if (flst_get_len(space_header + FSP_SEG_INODES_FREE, mtr) == 0) {
1926
1923
                /* Allocate a new segment inode page */
1927
1924
 
1939
1936
                mach_read_from_4(FSP_SPACE_FLAGS + space_header));
1940
1937
        block = buf_page_get(page_get_space_id(page_align(space_header)),
1941
1938
                             zip_size, page_no, RW_X_LATCH, mtr);
1942
 
#ifdef UNIV_SYNC_DEBUG
1943
1939
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
1944
 
#endif /* UNIV_SYNC_DEBUG */
 
1940
 
1945
1941
        page = buf_block_get_frame(block);
1946
1942
 
1947
1943
        n = fsp_seg_inode_page_find_free(page, 0, zip_size, mtr);
2402
2398
        ulint   used;
2403
2399
 
2404
2400
        ut_ad(inode && mtr);
 
2401
        ut_ad(!((page_offset(inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE));
2405
2402
 
2406
2403
        reserved = fseg_n_reserved_pages_low(inode, &used, mtr);
2407
2404
 
2462
2459
        dulint          seg_id;
2463
2460
        fil_addr_t      first;
2464
2461
 
 
2462
        ut_ad(!((page_offset(inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE));
 
2463
 
2465
2464
        if (flst_get_len(inode + FSEG_FREE, mtr) > 0) {
2466
2465
                /* Segment free list is not empty, allocate from it */
2467
2466
 
2531
2530
        ut_ad((direction >= FSP_UP) && (direction <= FSP_NO_DIR));
2532
2531
        ut_ad(mach_read_from_4(seg_inode + FSEG_MAGIC_N)
2533
2532
              == FSEG_MAGIC_N_VALUE);
 
2533
        ut_ad(!((page_offset(seg_inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE));
2534
2534
        seg_id = mtr_read_dulint(seg_inode + FSEG_ID, mtr);
2535
2535
 
2536
2536
        ut_ad(!ut_dulint_is_zero(seg_id));
2712
2712
                        mach_read_from_4(FSP_SPACE_FLAGS + space_header));
2713
2713
 
2714
2714
                block = buf_page_create(space, ret_page, zip_size, mtr);
2715
 
#ifdef UNIV_SYNC_DEBUG
2716
2715
                buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
2717
 
#endif /* UNIV_SYNC_DEBUG */
 
2716
 
2718
2717
                if (UNIV_UNLIKELY(block != buf_page_get(space, zip_size,
2719
2718
                                                        ret_page, RW_X_LATCH,
2720
2719
                                                        mtr))) {
3121
3120
        ulint   not_full_n_used;
3122
3121
 
3123
3122
        ut_ad(seg_inode && mtr);
 
3123
        ut_ad(!((page_offset(seg_inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE));
3124
3124
 
3125
3125
        descr = xdes_get_descriptor(space, zip_size, page, mtr);
3126
3126
 
3183
3183
        ut_ad(seg_inode && mtr);
3184
3184
        ut_ad(mach_read_from_4(seg_inode + FSEG_MAGIC_N)
3185
3185
              == FSEG_MAGIC_N_VALUE);
 
3186
        ut_ad(!((page_offset(seg_inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE));
3186
3187
 
3187
3188
        /* Drop search system page hash index if the page is found in
3188
3189
        the pool and is hashed */