| 1 | /* |
| 2 | * Ceph - scalable distributed file system |
| 3 | * |
| 4 | * Copyright (C) 2004-2010 Sage Weil <sage@newdream.net> |
| 5 | * |
| 6 | * This is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU Lesser General Public |
| 8 | * License version 2.1, as published by the Free Software |
| 9 | * Foundation. See file COPYING. |
| 10 | * |
| 11 | */ |
| 12 | |
| 13 | #ifndef CEPH_RBD_TYPES_H |
| 14 | #define CEPH_RBD_TYPES_H |
| 15 | |
| 16 | #include <linux/types.h> |
| 17 | |
| 18 | /* For format version 2, rbd image 'foo' consists of objects |
| 19 | * rbd_id.foo - id of image |
| 20 | * rbd_header.<id> - image metadata |
| 21 | * rbd_object_map.<id> - optional image object map |
| 22 | * rbd_data.<id>.0000000000000000 |
| 23 | * rbd_data.<id>.0000000000000001 |
| 24 | * ... - data |
| 25 | * Clients do not access header data directly in rbd format 2. |
| 26 | */ |
| 27 | |
| 28 | #define "rbd_header." |
| 29 | #define RBD_OBJECT_MAP_PREFIX "rbd_object_map." |
| 30 | #define RBD_ID_PREFIX "rbd_id." |
| 31 | #define RBD_V2_DATA_FORMAT "%s.%016llx" |
| 32 | |
| 33 | #define RBD_LOCK_NAME "rbd_lock" |
| 34 | #define RBD_LOCK_TAG "internal" |
| 35 | #define RBD_LOCK_COOKIE_PREFIX "auto" |
| 36 | |
| 37 | enum rbd_notify_op { |
| 38 | RBD_NOTIFY_OP_ACQUIRED_LOCK = 0, |
| 39 | RBD_NOTIFY_OP_RELEASED_LOCK = 1, |
| 40 | RBD_NOTIFY_OP_REQUEST_LOCK = 2, |
| 41 | = 3, |
| 42 | }; |
| 43 | |
| 44 | #define OBJECT_NONEXISTENT 0 |
| 45 | #define OBJECT_EXISTS 1 |
| 46 | #define OBJECT_PENDING 2 |
| 47 | #define OBJECT_EXISTS_CLEAN 3 |
| 48 | |
| 49 | #define RBD_FLAG_OBJECT_MAP_INVALID (1ULL << 0) |
| 50 | #define RBD_FLAG_FAST_DIFF_INVALID (1ULL << 1) |
| 51 | |
| 52 | /* |
| 53 | * For format version 1, rbd image 'foo' consists of objects |
| 54 | * foo.rbd - image metadata |
| 55 | * rb.<idhi>.<idlo>.<extra>.000000000000 |
| 56 | * rb.<idhi>.<idlo>.<extra>.000000000001 |
| 57 | * ... - data |
| 58 | * There is no notion of a persistent image id in rbd format 1. |
| 59 | */ |
| 60 | |
| 61 | #define RBD_SUFFIX ".rbd" |
| 62 | #define RBD_V1_DATA_FORMAT "%s.%012llx" |
| 63 | |
| 64 | #define RBD_DIRECTORY "rbd_directory" |
| 65 | #define RBD_INFO "rbd_info" |
| 66 | |
| 67 | #define RBD_DEFAULT_OBJ_ORDER 22 /* 4MB */ |
| 68 | #define RBD_MIN_OBJ_ORDER 16 |
| 69 | #define RBD_MAX_OBJ_ORDER 30 |
| 70 | |
| 71 | #define "<<< Rados Block Device Image >>>\n" |
| 72 | #define "RBD" |
| 73 | #define "001.005" |
| 74 | |
| 75 | struct rbd_image_snap_ondisk { |
| 76 | __le64 id; |
| 77 | __le64 image_size; |
| 78 | } __attribute__((packed)); |
| 79 | |
| 80 | struct { |
| 81 | char [40]; |
| 82 | char [24]; |
| 83 | char [4]; |
| 84 | char [8]; |
| 85 | struct { |
| 86 | __u8 ; |
| 87 | __u8 ; |
| 88 | __u8 ; |
| 89 | __u8 ; |
| 90 | } __attribute__((packed)) ; |
| 91 | __le64 ; |
| 92 | __le64 ; |
| 93 | __le32 ; |
| 94 | __le32 ; |
| 95 | __le64 ; |
| 96 | struct rbd_image_snap_ondisk []; |
| 97 | } __attribute__((packed)); |
| 98 | |
| 99 | |
| 100 | #endif |
| 101 | |