~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/include/buf0buddy.h

Merge initial InnoDB+ import.

This was applied by generating a patch between MySQL 5.1.50 InnoDB plugin and
the just-merged innodb+ from mysql-trunk revision-id: vasil.dimov@oracle.com-20100422110752-1zowoqxel5xx3z2e

Then, some manual merge resolving and it worked. This should make it much
easier to merge the rest of InnoDB 1.1 and 1.2 from the mysql tree using
my bzr-reapply script.

This takes us to InnoDB 1.1.1(ish).

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
 
37
37
/**********************************************************************//**
38
38
Allocate a block.  The thread calling this function must hold
39
 
buf_pool_mutex and must not hold buf_pool_zip_mutex or any
40
 
block->mutex.  The buf_pool_mutex may only be released and reacquired
 
39
buf_pool->mutex and must not hold buf_pool_zip_mutex or any
 
40
block->mutex.  The buf_pool->mutex may only be released and reacquired
41
41
if lru != NULL.  This function should only be used for allocating
42
42
compressed page frames or control blocks (buf_page_t).  Allocated
43
43
control blocks must be properly initialized immediately after
44
44
buf_buddy_alloc() has returned the memory, before releasing
45
 
buf_pool_mutex.
 
45
buf_pool->mutex.
46
46
@return allocated block, possibly NULL if lru == NULL */
47
47
UNIV_INLINE
48
48
void*
49
49
buf_buddy_alloc(
50
50
/*============*/
 
51
        buf_pool_t*     buf_pool,
 
52
                        /*!< buffer pool in which the block resides */
51
53
        ulint   size,   /*!< in: block size, up to UNIV_PAGE_SIZE */
52
54
        ibool*  lru)    /*!< in: pointer to a variable that will be assigned
53
55
                        TRUE if storage was allocated from the LRU list
54
 
                        and buf_pool_mutex was temporarily released,
 
56
                        and buf_pool->mutex was temporarily released,
55
57
                        or NULL if the LRU list should not be used */
56
58
        __attribute__((malloc));
57
59
 
61
63
void
62
64
buf_buddy_free(
63
65
/*===========*/
 
66
        buf_pool_t*     buf_pool,
 
67
                        /*!< buffer pool in which the block resides */
64
68
        void*   buf,    /*!< in: block to be freed, must not be
65
69
                        pointed to by the buffer pool */
66
70
        ulint   size)   /*!< in: block size, up to UNIV_PAGE_SIZE */
67
71
        __attribute__((nonnull));
68
72
 
69
 
/** Statistics of buddy blocks of a given size. */
70
 
struct buf_buddy_stat_struct {
71
 
        /** Number of blocks allocated from the buddy system. */
72
 
        ulint           used;
73
 
        /** Number of blocks relocated by the buddy system. */
74
 
        ib_uint64_t     relocated;
75
 
        /** Total duration of block relocations, in microseconds. */
76
 
        ib_uint64_t     relocated_usec;
77
 
};
78
 
 
79
 
/** Statistics of buddy blocks of a given size. */
80
 
typedef struct buf_buddy_stat_struct buf_buddy_stat_t;
81
 
 
82
 
/** Statistics of the buddy system, indexed by block size.
83
 
Protected by buf_pool_mutex. */
84
 
extern buf_buddy_stat_t buf_buddy_stat[BUF_BUDDY_SIZES + 1];
85
 
 
86
73
#ifndef UNIV_NONINL
87
74
# include "buf0buddy.ic"
88
75
#endif