From e952cf459f9e60ce44c48032abc80343ef130f59 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 9 Oct 2009 16:38:45 -0700 Subject: [PATCH] --- yaml --- r: 188575 b: refs/heads/master c: 752727a1b21a462d6ef634d552f180ae692f8947 h: refs/heads/master i: 188573: f500e3ce73cffbbd30246b5bded829e5b6da3ab4 188571: eeac9143545956a4856fbc636e8408283cd310be 188567: ab5cf8f5d997f01cd7993cb79a8a8e188133820c 188559: 60fcd69df3e3d55715d616b9710f053f6f4c8c66 188543: 293d4111838a82022ab9f2646f6192e18cf3be6d v: v3 --- [refs] | 2 +- trunk/fs/ceph/ceph_fs.c | 24 ++++++++++++++++++++++++ trunk/fs/ceph/ceph_fs.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 11b57c5cdb5d..75f78109a6e9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 13e38c8ae771d73bf6d1f0f98e35f99c0f0d48ff +refs/heads/master: 752727a1b21a462d6ef634d552f180ae692f8947 diff --git a/trunk/fs/ceph/ceph_fs.c b/trunk/fs/ceph/ceph_fs.c index 9371ff1c0002..a950b4083577 100644 --- a/trunk/fs/ceph/ceph_fs.c +++ b/trunk/fs/ceph/ceph_fs.c @@ -3,6 +3,30 @@ */ #include "types.h" +/* + * return true if @layout appears to be valid + */ +int ceph_file_layout_is_valid(const struct ceph_file_layout *layout) +{ + __u32 su = le32_to_cpu(layout->fl_stripe_unit); + __u32 sc = le32_to_cpu(layout->fl_stripe_count); + __u32 os = le32_to_cpu(layout->fl_object_size); + + /* stripe unit, object size must be non-zero, 64k increment */ + if (!su || (su & (CEPH_MIN_STRIPE_UNIT-1))) + return 0; + if (!os || (os & (CEPH_MIN_STRIPE_UNIT-1))) + return 0; + /* object size must be a multiple of stripe unit */ + if (os < su || os % su) + return 0; + /* stripe count must be non-zero */ + if (!sc) + return 0; + return 1; +} + + int ceph_flags_to_mode(int flags) { #ifdef O_DIRECTORY /* fixme */ diff --git a/trunk/fs/ceph/ceph_fs.h b/trunk/fs/ceph/ceph_fs.h index acf24c6944c7..b3bbab1952c9 100644 --- a/trunk/fs/ceph/ceph_fs.h +++ b/trunk/fs/ceph/ceph_fs.h @@ -72,7 +72,9 @@ struct ceph_file_layout { __le32 fl_pg_pool; /* namespace, crush ruleset, rep level */ } __attribute__ ((packed)); +#define CEPH_MIN_STRIPE_UNIT 65536 +int ceph_file_layout_is_valid(const struct ceph_file_layout *layout); /*********************************************