From 40b03555cd2448ec8209e09e620ff4ff43254c93 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 20 Dec 2007 17:19:10 -0800 Subject: [PATCH] more type cleanup --- src/client/SyntheticClient.cc | 2 +- src/include/ceph_fs.h | 16 ++++++++++++++-- src/kernel/osd_client.h | 6 +++--- src/kernel/osdmap.h | 2 +- src/messages/MOSDOp.h | 2 +- src/messages/MOSDOpReply.h | 2 +- src/osd/OSDMap.h | 26 +++++--------------------- src/osd/RAID4PG.cc | 6 +++--- src/osd/ReplicatedPG.cc | 12 ++++++------ src/osd/osd_types.h | 6 +++--- src/osdc/Objecter.cc | 6 +++--- 11 files changed, 41 insertions(+), 45 deletions(-) diff --git a/src/client/SyntheticClient.cc b/src/client/SyntheticClient.cc index 8cd41a598bf44..fc2571fe4cd96 100644 --- a/src/client/SyntheticClient.cc +++ b/src/client/SyntheticClient.cc @@ -1730,7 +1730,7 @@ int SyntheticClient::overload_osd_0(int n, int size, int wrsize) { int SyntheticClient::check_first_primary(int fh) { list extents; client->enumerate_layout(fh, extents, 1, 0); - return client->osdmap->get_pg_primary((extents.begin())->layout.pgid); + return client->osdmap->get_pg_primary((extents.begin())->layout.ol_pgid); } int SyntheticClient::write_file(string& fn, int size, int wrsize) // size is in MB, wrsize in bytes diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index efd51d39b69b7..4c1d1c8f2510b 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -121,12 +121,24 @@ union ceph_pg { #define ceph_pg_is_rep(pg) (pg.pg.type == CEPH_PG_TYPE_REP) #define ceph_pg_is_raid4(pg) (pg.pg.type == CEPH_PG_TYPE_RAID4) +/* + * stable_mod func is used to control number of placement groups + * b <= bmask and bmask=(2**n)-1 + * e.g., b=12 -> bmask=15, b=123 -> bmask=127 + */ +static inline int ceph_stable_mod(int x, int b, int bmask) { + if ((x & bmask) < b) + return x & bmask; + else + return (x & (bmask>>1)); +} + /* * object layout - how a given object should be stored. */ struct ceph_object_layout { - union ceph_pg pgid; - __u32 stripe_unit; + union ceph_pg ol_pgid; + __u32 ol_stripe_unit; } __attribute__ ((packed)); /* diff --git a/src/kernel/osd_client.h b/src/kernel/osd_client.h index 47291ed64a557..1d4f311f2338d 100644 --- a/src/kernel/osd_client.h +++ b/src/kernel/osd_client.h @@ -15,10 +15,10 @@ struct ceph_msg; * object extent */ struct ceph_object_extent { - ceph_object_t oid; + struct ceph_object oid; __u64 start; __u64 length; - ceph_object_layout_t layout; + struct ceph_object_layout layout; }; /* @@ -30,7 +30,7 @@ enum { struct ceph_osd_request { __u64 r_tid; - ceph_pg_t r_pgid; + union ceph_pg r_pgid; int r_flags; struct ceph_msg *r_request; struct ceph_msg *r_reply; diff --git a/src/kernel/osdmap.h b/src/kernel/osdmap.h index 8700950d84611..b18564bb91cc0 100644 --- a/src/kernel/osdmap.h +++ b/src/kernel/osdmap.h @@ -22,7 +22,7 @@ struct ceph_osdmap { __u32 num_pg_swap_primary; struct { - ceph_pg_t pg; + union ceph_pg pg; __u32 osd; } *pg_swap_primary; }; diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index c7c16d067dbd8..4017f32896422 100644 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -75,7 +75,7 @@ public: void set_client_addr(const entity_addr_t& a) { head.client_inst.addr = a.v; } object_t get_oid() { return object_t(head.oid); } - pg_t get_pg() { return head.layout.pgid; } + pg_t get_pg() { return head.layout.ol_pgid; } ceph_object_layout get_layout() { return head.layout; } epoch_t get_map_epoch() { return head.osdmap_epoch; } diff --git a/src/messages/MOSDOpReply.h b/src/messages/MOSDOpReply.h index 60eeeddc11db1..db6c25735345d 100644 --- a/src/messages/MOSDOpReply.h +++ b/src/messages/MOSDOpReply.h @@ -36,7 +36,7 @@ class MOSDOpReply : public Message { public: long get_tid() { return head.tid; } object_t get_oid() { return head.oid; } - pg_t get_pg() { return head.layout.pgid; } + pg_t get_pg() { return head.layout.ol_pgid; } int get_op() { return head.op; } bool is_safe() { return head.flags & CEPH_OSD_OP_SAFE; } diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 0252f0444be67..29a82f50ed070 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -41,15 +41,6 @@ using namespace std; * some system constants */ -// from LSB to MSB, -#define PG_PS_BITS 16 // max bits for placement seed/group portion of PG -#define PG_REP_BITS 6 // up to 64 replicas -#define PG_TYPE_BITS 2 -#define PG_PS_MASK ((1LL<>1)); -} - inline int calc_bits_of(int t) { int b = 0; while (t) { @@ -399,19 +383,19 @@ private: ps_t ps; switch (g_conf.osd_object_layout) { case CEPH_OBJECT_LAYOUT_LINEAR: - ps = stable_mod(oid.bno + oid.ino, num, num_mask); + ps = ceph_stable_mod(oid.bno + oid.ino, num, num_mask); break; case CEPH_OBJECT_LAYOUT_HASHINO: //ps = stable_mod(oid.bno + H(oid.bno+oid.ino)^H(oid.ino>>32), num, num_mask); - ps = stable_mod(oid.bno + crush_hash32_2(oid.ino, oid.ino>>32), num, num_mask); + ps = ceph_stable_mod(oid.bno + crush_hash32_2(oid.ino, oid.ino>>32), num, num_mask); break; case CEPH_OBJECT_LAYOUT_HASH: //ps = stable_mod(H( (oid.bno & oid.ino) ^ ((oid.bno^oid.ino) >> 32) ), num, num_mask); //ps = stable_mod(H(oid.bno) + H(oid.ino)^H(oid.ino>>32), num, num_mask); //ps = stable_mod(oid.bno + H(oid.bno+oid.ino)^H(oid.bno+oid.ino>>32), num, num_mask); - ps = stable_mod(oid.bno + crush_hash32_2(oid.ino, oid.ino>>32), num, num_mask); + ps = ceph_stable_mod(oid.bno + crush_hash32_2(oid.ino, oid.ino>>32), num, num_mask); break; default: @@ -423,8 +407,8 @@ private: // construct object layout pg_t pgid = pg_t(pg_type, pg_size, ps, preferred); ceph_object_layout layout; - layout.pgid = pgid.u; - layout.stripe_unit = object_stripe_unit; + layout.ol_pgid = pgid.u; + layout.ol_stripe_unit = object_stripe_unit; return layout; } diff --git a/src/osd/RAID4PG.cc b/src/osd/RAID4PG.cc index 165dca1726935..67b9b6dd364e2 100644 --- a/src/osd/RAID4PG.cc +++ b/src/osd/RAID4PG.cc @@ -49,12 +49,12 @@ void RAID4PG::do_op(MOSDOp *op) // map data onto pobjects int n = pg.size() - 1; // n+1 raid4 - int rank = (off % layout.stripe_unit) % n; + int rank = (off % layout.ol_stripe_unit) % n; off_t off_in_bl = 0; while (left > 0) { pobject_t po(0, rank, oid); - off_t off_in_po = off % layout.stripe_unit; - off_t stripe_unit_end = off - off_in_po + layout.stripe_unit; + off_t off_in_po = off % layout.ol_stripe_unit; + off_t stripe_unit_end = off - off_in_po + layout.ol_stripe_unit; off_t len_in_po = MAX(left, stripe_unit_end-off); bufferlist data_in_po; data_in_po.substr_of(data, off_in_bl, len_in_po); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 7309b8f6de94a..1a0e52fa4c534 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -154,8 +154,8 @@ bool ReplicatedPG::preprocess_op(MOSDOp *op, utime_t now) dout(-10) << "preprocess_op balance-reads on " << oid << dendl; balancing_reads.insert(oid); ceph_object_layout layout; - layout.pgid = info.pgid.u; - layout.stripe_unit = 0; + layout.ol_pgid = info.pgid.u; + layout.ol_stripe_unit = 0; MOSDOp *pop = new MOSDOp(osd->messenger->get_myinst(), 0, osd->get_tid(), oid, layout, @@ -168,8 +168,8 @@ bool ReplicatedPG::preprocess_op(MOSDOp *op, utime_t now) dout(-10) << "preprocess_op unbalance-reads on " << oid << dendl; unbalancing_reads.insert(oid); ceph_object_layout layout; - layout.pgid = info.pgid.u; - layout.stripe_unit = 0; + layout.ol_pgid = info.pgid.u; + layout.ol_stripe_unit = 0; MOSDOp *pop = new MOSDOp(osd->messenger->get_myinst(), 0, osd->get_tid(), oid, layout, @@ -1131,8 +1131,8 @@ void ReplicatedPG::op_modify(MOSDOp *op) unbalancing_reads.insert(op->get_oid()); ceph_object_layout layout; - layout.pgid = info.pgid.u; - layout.stripe_unit = 0; + layout.ol_pgid = info.pgid.u; + layout.ol_stripe_unit = 0; MOSDOp *pop = new MOSDOp(osd->messenger->get_myinst(), 0, osd->get_tid(), op->get_oid(), layout, diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 723d58b982c67..49ead46ee7927 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -165,9 +165,9 @@ namespace __gnu_cxx { inline ostream& operator<<(ostream& out, const ceph_object_layout &ol) { - out << "pg" << ol.pgid; - if (ol.stripe_unit) - out << ".su=" << ol.stripe_unit; + out << "pg" << ol.ol_pgid; + if (ol.ol_stripe_unit) + out << ".su=" << ol.ol_stripe_unit; return out; } diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 1ae785fc78444..792cadcdbc90c 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -334,7 +334,7 @@ tid_t Objecter::stat_submit(OSDStat *st) { // find OSD ObjectExtent &ex = st->extents.front(); - PG &pg = get_pg( ex.layout.pgid ); + PG &pg = get_pg( ex.layout.ol_pgid ); // pick tid last_tid++; @@ -449,7 +449,7 @@ tid_t Objecter::readx(OSDRead *rd, Context *onfinish) tid_t Objecter::readx_submit(OSDRead *rd, ObjectExtent &ex, bool retry) { // find OSD - PG &pg = get_pg( ex.layout.pgid ); + PG &pg = get_pg( ex.layout.ol_pgid ); // pick tid last_tid++; @@ -719,7 +719,7 @@ tid_t Objecter::modifyx(OSDModify *wr, Context *onack, Context *oncommit) tid_t Objecter::modifyx_submit(OSDModify *wr, ObjectExtent &ex, tid_t usetid) { // find - PG &pg = get_pg( ex.layout.pgid ); + PG &pg = get_pg( ex.layout.ol_pgid ); // pick tid tid_t tid; -- 2.39.5