Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 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 | |
Alex Elder | 3bb59ad | 2012-07-10 20:30:10 -0500 | [diff] [blame] | 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_data.<id>.0000000000000000 |
| 22 | * rbd_data.<id>.0000000000000001 |
| 23 | * ... - data |
| 24 | * Clients do not access header data directly in rbd format 2. |
| 25 | */ |
| 26 | |
| 27 | #define RBD_HEADER_PREFIX "rbd_header." |
| 28 | #define RBD_DATA_PREFIX "rbd_data." |
| 29 | #define RBD_ID_PREFIX "rbd_id." |
| 30 | |
Ilya Dryomov | ed95b21 | 2016-08-12 16:40:02 +0200 | [diff] [blame] | 31 | #define RBD_LOCK_NAME "rbd_lock" |
| 32 | #define RBD_LOCK_TAG "internal" |
| 33 | #define RBD_LOCK_COOKIE_PREFIX "auto" |
| 34 | |
| 35 | enum rbd_notify_op { |
| 36 | RBD_NOTIFY_OP_ACQUIRED_LOCK = 0, |
| 37 | RBD_NOTIFY_OP_RELEASED_LOCK = 1, |
| 38 | RBD_NOTIFY_OP_REQUEST_LOCK = 2, |
| 39 | RBD_NOTIFY_OP_HEADER_UPDATE = 3, |
| 40 | }; |
| 41 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 42 | /* |
Alex Elder | 3bb59ad | 2012-07-10 20:30:10 -0500 | [diff] [blame] | 43 | * For format version 1, rbd image 'foo' consists of objects |
| 44 | * foo.rbd - image metadata |
| 45 | * rb.<idhi>.<idlo>.00000000 |
| 46 | * rb.<idhi>.<idlo>.00000001 |
| 47 | * ... - data |
| 48 | * There is no notion of a persistent image id in rbd format 1. |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 49 | */ |
| 50 | |
| 51 | #define RBD_SUFFIX ".rbd" |
Alex Elder | 3bb59ad | 2012-07-10 20:30:10 -0500 | [diff] [blame] | 52 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 53 | #define RBD_DIRECTORY "rbd_directory" |
| 54 | #define RBD_INFO "rbd_info" |
| 55 | |
| 56 | #define RBD_DEFAULT_OBJ_ORDER 22 /* 4MB */ |
| 57 | #define RBD_MIN_OBJ_ORDER 16 |
| 58 | #define RBD_MAX_OBJ_ORDER 30 |
| 59 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 60 | #define RBD_COMP_NONE 0 |
| 61 | #define RBD_CRYPT_NONE 0 |
| 62 | |
| 63 | #define RBD_HEADER_TEXT "<<< Rados Block Device Image >>>\n" |
| 64 | #define RBD_HEADER_SIGNATURE "RBD" |
| 65 | #define RBD_HEADER_VERSION "001.005" |
| 66 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 67 | struct rbd_image_snap_ondisk { |
| 68 | __le64 id; |
| 69 | __le64 image_size; |
| 70 | } __attribute__((packed)); |
| 71 | |
| 72 | struct rbd_image_header_ondisk { |
| 73 | char text[40]; |
Alex Elder | 843a0d0 | 2012-08-31 17:29:51 -0500 | [diff] [blame] | 74 | char object_prefix[24]; |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 75 | char signature[4]; |
| 76 | char version[8]; |
| 77 | struct { |
| 78 | __u8 order; |
| 79 | __u8 crypt_type; |
| 80 | __u8 comp_type; |
| 81 | __u8 unused; |
| 82 | } __attribute__((packed)) options; |
| 83 | __le64 image_size; |
| 84 | __le64 snap_seq; |
| 85 | __le32 snap_count; |
| 86 | __le32 reserved; |
| 87 | __le64 snap_names_len; |
| 88 | struct rbd_image_snap_ondisk snaps[0]; |
| 89 | } __attribute__((packed)); |
| 90 | |
| 91 | |
| 92 | #endif |