diff options
| author | Sage Weil <sage@newdream.net> | 2010-11-16 14:14:34 -0500 |
|---|---|---|
| committer | Sage Weil <sage@newdream.net> | 2011-01-12 18:15:12 -0500 |
| commit | 6c0f3af72cb1622a66962a1180c36ef8c41be8e2 (patch) | |
| tree | 66e415bf31ea31a3e9360c0ce624fd20b6050c89 /include/linux/ceph | |
| parent | 3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5 (diff) | |
ceph: add dir_layout to inode
Add a ceph_dir_layout to the inode, and calculate dentry hash values based
on the parent directory's specified dir_hash function. This is needed
because the old default Linux dcache hash function is extremely week and
leads to a poor distribution of files among dir fragments.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'include/linux/ceph')
| -rw-r--r-- | include/linux/ceph/ceph_fs.h | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/include/linux/ceph/ceph_fs.h b/include/linux/ceph/ceph_fs.h index c3c74aef289..09dcc0c2ffd 100644 --- a/include/linux/ceph/ceph_fs.h +++ b/include/linux/ceph/ceph_fs.h | |||
| @@ -43,6 +43,10 @@ | |||
| 43 | #define CEPH_FEATURE_NOSRCADDR (1<<1) | 43 | #define CEPH_FEATURE_NOSRCADDR (1<<1) |
| 44 | #define CEPH_FEATURE_MONCLOCKCHECK (1<<2) | 44 | #define CEPH_FEATURE_MONCLOCKCHECK (1<<2) |
| 45 | #define CEPH_FEATURE_FLOCK (1<<3) | 45 | #define CEPH_FEATURE_FLOCK (1<<3) |
| 46 | #define CEPH_FEATURE_SUBSCRIBE2 (1<<4) | ||
| 47 | #define CEPH_FEATURE_MONNAMES (1<<5) | ||
| 48 | #define CEPH_FEATURE_RECONNECT_SEQ (1<<6) | ||
| 49 | #define CEPH_FEATURE_DIRLAYOUTHASH (1<<7) | ||
| 46 | 50 | ||
| 47 | 51 | ||
| 48 | /* | 52 | /* |
| @@ -55,10 +59,10 @@ struct ceph_file_layout { | |||
| 55 | __le32 fl_stripe_count; /* over this many objects */ | 59 | __le32 fl_stripe_count; /* over this many objects */ |
| 56 | __le32 fl_object_size; /* until objects are this big, then move to | 60 | __le32 fl_object_size; /* until objects are this big, then move to |
| 57 | new objects */ | 61 | new objects */ |
| 58 | __le32 fl_cas_hash; /* 0 = none; 1 = sha256 */ | 62 | __le32 fl_cas_hash; /* UNUSED. 0 = none; 1 = sha256 */ |
| 59 | 63 | ||
| 60 | /* pg -> disk layout */ | 64 | /* pg -> disk layout */ |
| 61 | __le32 fl_object_stripe_unit; /* for per-object parity, if any */ | 65 | __le32 fl_object_stripe_unit; /* UNUSED. for per-object parity, if any */ |
| 62 | 66 | ||
| 63 | /* object -> pg layout */ | 67 | /* object -> pg layout */ |
| 64 | __le32 fl_pg_preferred; /* preferred primary for pg (-1 for none) */ | 68 | __le32 fl_pg_preferred; /* preferred primary for pg (-1 for none) */ |
| @@ -69,6 +73,12 @@ struct ceph_file_layout { | |||
| 69 | 73 | ||
| 70 | int ceph_file_layout_is_valid(const struct ceph_file_layout *layout); | 74 | int ceph_file_layout_is_valid(const struct ceph_file_layout *layout); |
| 71 | 75 | ||
| 76 | struct ceph_dir_layout { | ||
| 77 | __u8 dl_dir_hash; /* see ceph_hash.h for ids */ | ||
| 78 | __u8 dl_unused1; | ||
| 79 | __u16 dl_unused2; | ||
| 80 | __u32 dl_unused3; | ||
| 81 | } __attribute__ ((packed)); | ||
| 72 | 82 | ||
| 73 | /* crypto algorithms */ | 83 | /* crypto algorithms */ |
| 74 | #define CEPH_CRYPTO_NONE 0x0 | 84 | #define CEPH_CRYPTO_NONE 0x0 |
| @@ -457,7 +467,7 @@ struct ceph_mds_reply_inode { | |||
| 457 | struct ceph_timespec rctime; | 467 | struct ceph_timespec rctime; |
| 458 | struct ceph_frag_tree_head fragtree; /* (must be at end of struct) */ | 468 | struct ceph_frag_tree_head fragtree; /* (must be at end of struct) */ |
| 459 | } __attribute__ ((packed)); | 469 | } __attribute__ ((packed)); |
| 460 | /* followed by frag array, then symlink string, then xattr blob */ | 470 | /* followed by frag array, symlink string, dir layout, xattr blob */ |
| 461 | 471 | ||
| 462 | /* reply_lease follows dname, and reply_inode */ | 472 | /* reply_lease follows dname, and reply_inode */ |
| 463 | struct ceph_mds_reply_lease { | 473 | struct ceph_mds_reply_lease { |
