Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions
drbd_bitmap.c File Reference
#include <linux/bitops.h>
#include <linux/vmalloc.h>
#include <linux/string.h>
#include <linux/drbd.h>
#include <linux/slab.h>
#include <asm/kmap_types.h>
#include "drbd_int.h"

Go to the source code of this file.

Data Structures

struct  drbd_bitmap
 
struct  bm_aio_ctx
 

Macros

#define bm_print_lock_info(m)   __bm_print_lock_info(m, __func__)
 
#define BM_PAGE_IDX_MASK   ((1UL<<24)-1)
 
#define BM_PAGE_IO_LOCK   31
 
#define BM_PAGE_IO_ERROR   30
 
#define BM_PAGE_NEED_WRITEOUT   29
 
#define BM_PAGE_LAZY_WRITEOUT   28
 
#define S2W(s)   ((s)<<(BM_EXT_SHIFT-BM_BLOCK_SHIFT-LN2_BPL))
 
#define MLPP(X)   ((X) & ((PAGE_SIZE/sizeof(long))-1))
 
#define LWPP   (PAGE_SIZE/sizeof(long))
 
#define BITS_PER_PAGE   (1UL << (PAGE_SHIFT + 3))
 
#define BITS_PER_PAGE_MASK   (BITS_PER_PAGE - 1)
 
#define BITS_PER_LONG_MASK   (BITS_PER_LONG - 1)
 
#define BM_AIO_COPY_PAGES   1
 
#define BM_WRITE_ALL_PAGES   2
 

Functions

void drbd_bm_lock (struct drbd_conf *mdev, char *why, enum bm_flag flags)
 
void drbd_bm_unlock (struct drbd_conf *mdev)
 
int drbd_bm_init (struct drbd_conf *mdev)
 
sector_t drbd_bm_capacity (struct drbd_conf *mdev)
 
void drbd_bm_cleanup (struct drbd_conf *mdev)
 
int drbd_bm_resize (struct drbd_conf *mdev, sector_t capacity, int set_new_bits)
 
unsigned long _drbd_bm_total_weight (struct drbd_conf *mdev)
 
unsigned long drbd_bm_total_weight (struct drbd_conf *mdev)
 
size_t drbd_bm_words (struct drbd_conf *mdev)
 
unsigned long drbd_bm_bits (struct drbd_conf *mdev)
 
void drbd_bm_merge_lel (struct drbd_conf *mdev, size_t offset, size_t number, unsigned long *buffer)
 
void drbd_bm_get_lel (struct drbd_conf *mdev, size_t offset, size_t number, unsigned long *buffer)
 
void drbd_bm_set_all (struct drbd_conf *mdev)
 
void drbd_bm_clear_all (struct drbd_conf *mdev)
 
int drbd_bm_read (struct drbd_conf *mdev) __must_hold(local)
 
int drbd_bm_write (struct drbd_conf *mdev) __must_hold(local)
 
int drbd_bm_write_all (struct drbd_conf *mdev) __must_hold(local)
 
int drbd_bm_write_lazy (struct drbd_conf *mdev, unsigned upper_idx) __must_hold(local)
 
int drbd_bm_write_copy_pages (struct drbd_conf *mdev) __must_hold(local)
 
int drbd_bm_write_page (struct drbd_conf *mdev, unsigned int idx) __must_hold(local)
 
unsigned long drbd_bm_find_next (struct drbd_conf *mdev, unsigned long bm_fo)
 
unsigned long _drbd_bm_find_next (struct drbd_conf *mdev, unsigned long bm_fo)
 
unsigned long _drbd_bm_find_next_zero (struct drbd_conf *mdev, unsigned long bm_fo)
 
int drbd_bm_set_bits (struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
 
int drbd_bm_clear_bits (struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
 
void _drbd_bm_set_bits (struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
 
int drbd_bm_test_bit (struct drbd_conf *mdev, const unsigned long bitnr)
 
int drbd_bm_count_bits (struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
 
int drbd_bm_e_weight (struct drbd_conf *mdev, unsigned long enr)
 
unsigned long drbd_bm_ALe_set_all (struct drbd_conf *mdev, unsigned long al_enr)
 

Macro Definition Documentation

#define BITS_PER_LONG_MASK   (BITS_PER_LONG - 1)

Definition at line 464 of file drbd_bitmap.c.

#define BITS_PER_PAGE   (1UL << (PAGE_SHIFT + 3))

Definition at line 462 of file drbd_bitmap.c.

#define BITS_PER_PAGE_MASK   (BITS_PER_PAGE - 1)

Definition at line 463 of file drbd_bitmap.c.

#define BM_AIO_COPY_PAGES   1

Definition at line 891 of file drbd_bitmap.c.

#define BM_PAGE_IDX_MASK   ((1UL<<24)-1)

Definition at line 188 of file drbd_bitmap.c.

#define BM_PAGE_IO_ERROR   30

Definition at line 192 of file drbd_bitmap.c.

#define BM_PAGE_IO_LOCK   31

Definition at line 190 of file drbd_bitmap.c.

#define BM_PAGE_LAZY_WRITEOUT   28

Definition at line 198 of file drbd_bitmap.c.

#define BM_PAGE_NEED_WRITEOUT   29

Definition at line 195 of file drbd_bitmap.c.

#define bm_print_lock_info (   m)    __bm_print_lock_info(m, __func__)

Definition at line 115 of file drbd_bitmap.c.

#define BM_WRITE_ALL_PAGES   2

Definition at line 892 of file drbd_bitmap.c.

#define LWPP   (PAGE_SIZE/sizeof(long))

Definition at line 324 of file drbd_bitmap.c.

#define MLPP (   X)    ((X) & ((PAGE_SIZE/sizeof(long))-1))

Definition at line 321 of file drbd_bitmap.c.

#define S2W (   s)    ((s)<<(BM_EXT_SHIFT-BM_BLOCK_SHIFT-LN2_BPL))

Definition at line 314 of file drbd_bitmap.c.

Function Documentation

unsigned long _drbd_bm_find_next ( struct drbd_conf mdev,
unsigned long  bm_fo 
)

Definition at line 1320 of file drbd_bitmap.c.

unsigned long _drbd_bm_find_next_zero ( struct drbd_conf mdev,
unsigned long  bm_fo 
)

Definition at line 1326 of file drbd_bitmap.c.

void _drbd_bm_set_bits ( struct drbd_conf mdev,
const unsigned long  s,
const unsigned long  e 
)

Definition at line 1440 of file drbd_bitmap.c.

unsigned long _drbd_bm_total_weight ( struct drbd_conf mdev)

Definition at line 729 of file drbd_bitmap.c.

unsigned long drbd_bm_ALe_set_all ( struct drbd_conf mdev,
unsigned long  al_enr 
)

Definition at line 1636 of file drbd_bitmap.c.

unsigned long drbd_bm_bits ( struct drbd_conf mdev)

Definition at line 765 of file drbd_bitmap.c.

sector_t drbd_bm_capacity ( struct drbd_conf mdev)

Definition at line 440 of file drbd_bitmap.c.

void drbd_bm_cleanup ( struct drbd_conf mdev)

Definition at line 448 of file drbd_bitmap.c.

void drbd_bm_clear_all ( struct drbd_conf mdev)

Definition at line 874 of file drbd_bitmap.c.

int drbd_bm_clear_bits ( struct drbd_conf mdev,
const unsigned long  s,
const unsigned long  e 
)

Definition at line 1414 of file drbd_bitmap.c.

int drbd_bm_count_bits ( struct drbd_conf mdev,
const unsigned long  s,
const unsigned long  e 
)

Definition at line 1549 of file drbd_bitmap.c.

int drbd_bm_e_weight ( struct drbd_conf mdev,
unsigned long  enr 
)

Definition at line 1603 of file drbd_bitmap.c.

unsigned long drbd_bm_find_next ( struct drbd_conf mdev,
unsigned long  bm_fo 
)

Definition at line 1305 of file drbd_bitmap.c.

void drbd_bm_get_lel ( struct drbd_conf mdev,
size_t  offset,
size_t  number,
unsigned long buffer 
)

Definition at line 825 of file drbd_bitmap.c.

int drbd_bm_init ( struct drbd_conf mdev)

Definition at line 424 of file drbd_bitmap.c.

void drbd_bm_lock ( struct drbd_conf mdev,
char why,
enum bm_flag  flags 
)

Definition at line 131 of file drbd_bitmap.c.

void drbd_bm_merge_lel ( struct drbd_conf mdev,
size_t  offset,
size_t  number,
unsigned long buffer 
)

Definition at line 778 of file drbd_bitmap.c.

int drbd_bm_read ( struct drbd_conf mdev)

drbd_bm_read() - Read the whole bitmap from its on disk location. : DRBD device.

Definition at line 1129 of file drbd_bitmap.c.

int drbd_bm_resize ( struct drbd_conf mdev,
sector_t  capacity,
int  set_new_bits 
)

Definition at line 604 of file drbd_bitmap.c.

void drbd_bm_set_all ( struct drbd_conf mdev)

Definition at line 860 of file drbd_bitmap.c.

int drbd_bm_set_bits ( struct drbd_conf mdev,
const unsigned long  s,
const unsigned long  e 
)

Definition at line 1408 of file drbd_bitmap.c.

int drbd_bm_test_bit ( struct drbd_conf mdev,
const unsigned long  bitnr 
)

Definition at line 1520 of file drbd_bitmap.c.

unsigned long drbd_bm_total_weight ( struct drbd_conf mdev)

Definition at line 745 of file drbd_bitmap.c.

void drbd_bm_unlock ( struct drbd_conf mdev)

Definition at line 162 of file drbd_bitmap.c.

size_t drbd_bm_words ( struct drbd_conf mdev)

Definition at line 756 of file drbd_bitmap.c.

int drbd_bm_write ( struct drbd_conf mdev)

drbd_bm_write() - Write the whole bitmap to its on disk location. : DRBD device.

Will only write pages that have changed since last IO.

Definition at line 1140 of file drbd_bitmap.c.

int drbd_bm_write_all ( struct drbd_conf mdev)

drbd_bm_write_all() - Write the whole bitmap to its on disk location. : DRBD device.

Will write all pages.

Definition at line 1151 of file drbd_bitmap.c.

int drbd_bm_write_copy_pages ( struct drbd_conf mdev)

drbd_bm_write_copy_pages() - Write the whole bitmap to its on disk location. : DRBD device.

Will only write pages that have changed since last IO. In contrast to drbd_bm_write(), this will copy the bitmap pages to temporary writeout pages. It is intended to trigger a full write-out while still allowing the bitmap to change, for example if a resync or online verify is aborted due to a failed peer disk, while local IO continues, or pending resync acks are still being processed.

Definition at line 1177 of file drbd_bitmap.c.

int drbd_bm_write_lazy ( struct drbd_conf mdev,
unsigned  upper_idx 
)

drbd_bm_lazy_write_out() - Write bitmap pages 0 to -1, if they have changed. : DRBD device. : 0: write all changed pages; +ve: page index to stop scanning for changed pages

Definition at line 1161 of file drbd_bitmap.c.

int drbd_bm_write_page ( struct drbd_conf mdev,
unsigned int  idx 
)

drbd_bm_write_page: Writes a PAGE_SIZE aligned piece of bitmap : DRBD device. : bitmap page index

We don't want to special case on logical_block_size of the backend device, so we submit PAGE_SIZE aligned pieces. Note that on "most" systems, PAGE_SIZE is 4k.

In case this becomes an issue on systems with larger PAGE_SIZE, we may want to change this again to write 4k aligned 4k pieces.

Definition at line 1195 of file drbd_bitmap.c.