diff options
author | Sage Weil <sage@newdream.net> | 2009-10-09 19:38:45 -0400 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2009-10-09 19:39:30 -0400 |
commit | 752727a1b21a462d6ef634d552f180ae692f8947 (patch) | |
tree | 46e59f04e85e160641a71f64fcfbb899dfb7e438 /fs/ceph | |
parent | 13e38c8ae771d73bf6d1f0f98e35f99c0f0d48ff (diff) |
ceph: add file layout validation
This tracks updates to code shared with userspace.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph')
-rw-r--r-- | fs/ceph/ceph_fs.c | 24 | ||||
-rw-r--r-- | fs/ceph/ceph_fs.h | 2 |
2 files changed, 26 insertions, 0 deletions
diff --git a/fs/ceph/ceph_fs.c b/fs/ceph/ceph_fs.c index 9371ff1c0002..a950b4083577 100644 --- a/fs/ceph/ceph_fs.c +++ b/fs/ceph/ceph_fs.c | |||
@@ -3,6 +3,30 @@ | |||
3 | */ | 3 | */ |
4 | #include "types.h" | 4 | #include "types.h" |
5 | 5 | ||
6 | /* | ||
7 | * return true if @layout appears to be valid | ||
8 | */ | ||
9 | int ceph_file_layout_is_valid(const struct ceph_file_layout *layout) | ||
10 | { | ||
11 | __u32 su = le32_to_cpu(layout->fl_stripe_unit); | ||
12 | __u32 sc = le32_to_cpu(layout->fl_stripe_count); | ||
13 | __u32 os = le32_to_cpu(layout->fl_object_size); | ||
14 | |||
15 | /* stripe unit, object size must be non-zero, 64k increment */ | ||
16 | if (!su || (su & (CEPH_MIN_STRIPE_UNIT-1))) | ||
17 | return 0; | ||
18 | if (!os || (os & (CEPH_MIN_STRIPE_UNIT-1))) | ||
19 | return 0; | ||
20 | /* object size must be a multiple of stripe unit */ | ||
21 | if (os < su || os % su) | ||
22 | return 0; | ||
23 | /* stripe count must be non-zero */ | ||
24 | if (!sc) | ||
25 | return 0; | ||
26 | return 1; | ||
27 | } | ||
28 | |||
29 | |||
6 | int ceph_flags_to_mode(int flags) | 30 | int ceph_flags_to_mode(int flags) |
7 | { | 31 | { |
8 | #ifdef O_DIRECTORY /* fixme */ | 32 | #ifdef O_DIRECTORY /* fixme */ |
diff --git a/fs/ceph/ceph_fs.h b/fs/ceph/ceph_fs.h index acf24c6944c7..b3bbab1952c9 100644 --- a/fs/ceph/ceph_fs.h +++ b/fs/ceph/ceph_fs.h | |||
@@ -72,7 +72,9 @@ struct ceph_file_layout { | |||
72 | __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ | 72 | __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ |
73 | } __attribute__ ((packed)); | 73 | } __attribute__ ((packed)); |
74 | 74 | ||
75 | #define CEPH_MIN_STRIPE_UNIT 65536 | ||
75 | 76 | ||
77 | int ceph_file_layout_is_valid(const struct ceph_file_layout *layout); | ||
76 | 78 | ||
77 | 79 | ||
78 | /********************************************* | 80 | /********************************************* |