| 1 | ================================
|
| 2 | kernel data structure for DRBD-9
|
| 3 | ================================
|
| 4 |
|
| 5 | This describes the in kernel data structure for DRBD-9. Starting with
|
| 6 | Linux v3.14 we are reorganizing DRBD to use this data structure.
|
| 7 |
|
| 8 | Basic Data Structure
|
| 9 | ====================
|
| 10 |
|
| 11 | A node has a number of DRBD resources. Each such resource has a number of
|
| 12 | devices (aka volumes) and connections to other nodes ("peer nodes"). Each DRBD
|
| 13 | device is represented by a block device locally.
|
| 14 |
|
| 15 | The DRBD objects are interconnected to form a matrix as depicted below; a
|
| 16 | drbd_peer_device object sits at each intersection between a drbd_device and a
|
| 17 | drbd_connection::
|
| 18 |
|
| 19 | /--------------+---------------+.....+---------------\
|
| 20 | | resource | device | | device |
|
| 21 | +--------------+---------------+.....+---------------+
|
| 22 | | connection | peer_device | | peer_device |
|
| 23 | +--------------+---------------+.....+---------------+
|
| 24 | : : : : :
|
| 25 | : : : : :
|
| 26 | +--------------+---------------+.....+---------------+
|
| 27 | | connection | peer_device | | peer_device |
|
| 28 | \--------------+---------------+.....+---------------/
|
| 29 |
|
| 30 | In this table, horizontally, devices can be accessed from resources by their
|
| 31 | volume number. Likewise, peer_devices can be accessed from connections by
|
| 32 | their volume number. Objects in the vertical direction are connected by double
|
| 33 | linked lists. There are back pointers from peer_devices to their connections a
|
| 34 | devices, and from connections and devices to their resource.
|
| 35 |
|
| 36 | All resources are in the drbd_resources double-linked list. In addition, all
|
| 37 | devices can be accessed by their minor device number via the drbd_devices idr.
|
| 38 |
|
| 39 | The drbd_resource, drbd_connection, and drbd_device objects are reference
|
| 40 | counted. The peer_device objects only serve to establish the links between
|
| 41 | devices and connections; their lifetime is determined by the lifetime of the
|
| 42 | device and connection which they reference.
|