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 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 31 | /* |
Alex Elder | 3bb59ad | 2012-07-10 20:30:10 -0500 | [diff] [blame] | 32 | * For format version 1, rbd image 'foo' consists of objects |
| 33 | * foo.rbd - image metadata |
| 34 | * rb.<idhi>.<idlo>.00000000 |
| 35 | * rb.<idhi>.<idlo>.00000001 |
| 36 | * ... - data |
| 37 | * 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] | 38 | */ |
| 39 | |
| 40 | #define RBD_SUFFIX ".rbd" |
Alex Elder | 3bb59ad | 2012-07-10 20:30:10 -0500 | [diff] [blame] | 41 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 42 | #define RBD_DIRECTORY "rbd_directory" |
| 43 | #define RBD_INFO "rbd_info" |
| 44 | |
| 45 | #define RBD_DEFAULT_OBJ_ORDER 22 /* 4MB */ |
| 46 | #define RBD_MIN_OBJ_ORDER 16 |
| 47 | #define RBD_MAX_OBJ_ORDER 30 |
| 48 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 49 | #define RBD_COMP_NONE 0 |
| 50 | #define RBD_CRYPT_NONE 0 |
| 51 | |
| 52 | #define RBD_HEADER_TEXT "<<< Rados Block Device Image >>>\n" |
| 53 | #define RBD_HEADER_SIGNATURE "RBD" |
| 54 | #define RBD_HEADER_VERSION "001.005" |
| 55 | |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 56 | struct rbd_image_snap_ondisk { |
| 57 | __le64 id; |
| 58 | __le64 image_size; |
| 59 | } __attribute__((packed)); |
| 60 | |
| 61 | struct rbd_image_header_ondisk { |
| 62 | char text[40]; |
Alex Elder | 843a0d0 | 2012-08-31 17:29:51 -0500 | [diff] [blame] | 63 | char object_prefix[24]; |
Yehuda Sadeh | 602adf4 | 2010-08-12 16:11:25 -0700 | [diff] [blame] | 64 | char signature[4]; |
| 65 | char version[8]; |
| 66 | struct { |
| 67 | __u8 order; |
| 68 | __u8 crypt_type; |
| 69 | __u8 comp_type; |
| 70 | __u8 unused; |
| 71 | } __attribute__((packed)) options; |
| 72 | __le64 image_size; |
| 73 | __le64 snap_seq; |
| 74 | __le32 snap_count; |
| 75 | __le32 reserved; |
| 76 | __le64 snap_names_len; |
| 77 | struct rbd_image_snap_ondisk snaps[0]; |
| 78 | } __attribute__((packed)); |
| 79 | |
| 80 | |
| 81 | #endif |