]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
final type munging in ceph_fs.h
authorSage Weil <sage@newdream.net>
Wed, 30 Apr 2008 17:12:51 +0000 (10:12 -0700)
committerSage Weil <sage@newdream.net>
Wed, 30 Apr 2008 17:12:51 +0000 (10:12 -0700)
12 files changed:
src/client/Client.cc
src/config.cc
src/include/ceph_fs.h
src/kernel/osdmap.c
src/mds/CInode.h
src/mds/IdAllocator.cc
src/mds/MDLog.cc
src/mds/SessionMap.cc
src/osd/OSDMap.h
src/osdc/Filer.cc
src/osdc/Journaler.cc
src/osdc/Journaler.h

index 84106432d9028d3111007bb3471a175631141fcf..951a5632484b8d5667b42b28918e54969654ba26 100644 (file)
@@ -2119,7 +2119,7 @@ int Client::fill_stat(Inode *in, struct stat *st)
   st->st_atime = in->inode.atime;
   st->st_mtime = in->inode.mtime;
   st->st_size = in->inode.size;
-  st->st_blksize = MAX(in->inode.layout.fl_stripe_unit, 4096);
+  st->st_blksize = MAX(ceph_file_layout_su(in->inode.layout), 4096);
   st->st_blocks = in->inode.size ? DIV_ROUND_UP(in->inode.size, st->st_blksize):0;
   return in->lease_mask;
 }
@@ -4035,7 +4035,7 @@ int Client::get_stripe_unit(int fd)
 {
   ceph_file_layout layout;
   describe_layout(fd, &layout);
-  return layout.fl_stripe_unit;
+  return ceph_file_layout_su(layout);
 }
 
 int Client::get_stripe_width(int fd)
index 58fe09a743086e70b70484e2daa105a2402f8dac..0db7f30b212844a4001d07e3add113328b3c3c80 100644 (file)
@@ -85,48 +85,48 @@ int _num_threads = 0;
 
 // file layouts
 struct ceph_file_layout g_default_file_layout = {
- fl_stripe_unit: 1<<22,
- fl_stripe_count: 1,
- fl_object_size: 1<<22,
- fl_cas_hash: 0,
- fl_object_stripe_unit: 0,
- fl_pg_preferred: -1,
+ fl_stripe_unit: cpu_to_le32(1<<22),
+ fl_stripe_count: cpu_to_le32(1),
+ fl_object_size: cpu_to_le32(1<<22),
+ fl_cas_hash: cpu_to_le32(0),
+ fl_object_stripe_unit: cpu_to_le32(0),
+ fl_pg_preferred: cpu_to_le32(-1),
  fl_pg_type: CEPH_PG_TYPE_REP,
  fl_pg_size: 2,
  fl_pg_pool: 0
 };
 
 struct ceph_file_layout g_default_mds_dir_layout = {
- fl_stripe_unit: 1<<22,
- fl_stripe_count: 1,
- fl_object_size: 1<<22,
- fl_cas_hash: 0,
- fl_object_stripe_unit: 0,
- fl_pg_preferred: -1,
+ fl_stripe_unit: cpu_to_le32(1<<22),
+ fl_stripe_count: cpu_to_le32(1),
+ fl_object_size: cpu_to_le32(1<<22),
+ fl_cas_hash: cpu_to_le32(0),
+ fl_object_stripe_unit: cpu_to_le32(0),
+ fl_pg_preferred: cpu_to_le32(-1),
  fl_pg_type: CEPH_PG_TYPE_REP,
  fl_pg_size: 2,
  fl_pg_pool: 0
 };
 
 struct ceph_file_layout g_default_mds_log_layout = {
- fl_stripe_unit: 1<<20,
- fl_stripe_count: 1,
- fl_object_size: 1<<20,
- fl_cas_hash: 0,
- fl_object_stripe_unit: 0,
- fl_pg_preferred: -1,
+ fl_stripe_unit: cpu_to_le32(1<<20),
+ fl_stripe_count: cpu_to_le32(1),
+ fl_object_size: cpu_to_le32(1<<20),
+ fl_cas_hash: cpu_to_le32(0),
+ fl_object_stripe_unit: cpu_to_le32(0),
+ fl_pg_preferred: cpu_to_le32(-1),
  fl_pg_type: CEPH_PG_TYPE_REP,
  fl_pg_size: 2,
  fl_pg_pool: 0
 };
 
 struct ceph_file_layout g_default_mds_anchortable_layout = {
- fl_stripe_unit: 1<<20,
- fl_stripe_count: 1,
- fl_object_size: 1<<20,
- fl_cas_hash: 0,
- fl_object_stripe_unit: 0,
- fl_pg_preferred: -1,
+ fl_stripe_unit: cpu_to_le32(1<<20),
+ fl_stripe_count: cpu_to_le32(1),
+ fl_object_size: cpu_to_le32(1<<20),
+ fl_cas_hash: cpu_to_le32(0),
+ fl_object_stripe_unit: cpu_to_le32(0),
+ fl_pg_preferred: cpu_to_le32(-1),
  fl_pg_type: CEPH_PG_TYPE_REP,
  fl_pg_size: 2,
  fl_pg_pool: 0
@@ -982,33 +982,33 @@ void parse_config_options(std::vector<const char*>& args)
       g_conf.tick = atoi(args[++i]);
 
     else if (strcmp(args[i], "--file_layout_unit") == 0) 
-      g_default_file_layout.fl_stripe_unit = atoi(args[++i]);
+      g_default_file_layout.fl_stripe_unit = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--file_layout_count") == 0) 
-      g_default_file_layout.fl_stripe_count = atoi(args[++i]);
+      g_default_file_layout.fl_stripe_count = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--file_layout_osize") == 0) 
-      g_default_file_layout.fl_object_size = atoi(args[++i]);
+      g_default_file_layout.fl_object_size = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--file_layout_pg_type") == 0) 
       g_default_file_layout.fl_pg_type = atoi(args[++i]);
     else if (strcmp(args[i], "--file_layout_pg_size") == 0) 
       g_default_file_layout.fl_pg_size = atoi(args[++i]);
 
     else if (strcmp(args[i], "--meta_dir_layout_unit") == 0) 
-      g_default_mds_dir_layout.fl_stripe_unit = atoi(args[++i]);
+      g_default_mds_dir_layout.fl_stripe_unit = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--meta_dir_layout_scount") == 0) 
-      g_default_mds_dir_layout.fl_stripe_count = atoi(args[++i]);
+      g_default_mds_dir_layout.fl_stripe_count = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--meta_dir_layout_osize") == 0) 
-      g_default_mds_dir_layout.fl_object_size = atoi(args[++i]);
+      g_default_mds_dir_layout.fl_object_size = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--meta_dir_layout_pg_type") == 0) 
       g_default_mds_dir_layout.fl_pg_type = atoi(args[++i]);
     else if (strcmp(args[i], "--meta_dir_layout_pg_size") == 0) 
       g_default_mds_dir_layout.fl_pg_size = atoi(args[++i]);
 
     else if (strcmp(args[i], "--meta_log_layout_unit") == 0) 
-      g_default_mds_log_layout.fl_stripe_unit = atoi(args[++i]);
+      g_default_mds_log_layout.fl_stripe_unit = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--meta_log_layout_scount") == 0) 
-      g_default_mds_log_layout.fl_stripe_count = atoi(args[++i]);
+      g_default_mds_log_layout.fl_stripe_count = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--meta_log_layout_osize") == 0) 
-      g_default_mds_log_layout.fl_object_size = atoi(args[++i]);
+      g_default_mds_log_layout.fl_object_size = cpu_to_le32(atoi(args[++i]));
     else if (strcmp(args[i], "--meta_log_layout_pg_type") == 0) 
       g_default_mds_log_layout.fl_pg_type = atoi(args[++i]);
     else if (strcmp(args[i], "--meta_log_layout_pg_size") == 0) {
index f55b5dfcf90939738811b34bb737690749ae5146..f76f086072de3535d19902c5dccafefd22d2a07c 100644 (file)
@@ -98,25 +98,34 @@ static inline __u32 frag_next(__u32 f) { return frag_make(frag_bits(f), frag_val
  */
 struct ceph_file_layout {
        /* file -> object mapping */
-       __u32 fl_stripe_unit;     /* stripe unit, in bytes.  must be multiple of page size. */
-       __u32 fl_stripe_count;    /* over this many objects */
-       __u32 fl_object_size;     /* until objects are this big, then move to new objects */
-       __u32 fl_cas_hash;        /* 0 = none; 1 = sha256 */
+       __le32 fl_stripe_unit;     /* stripe unit, in bytes.  must be multiple of page size. */
+       __le32 fl_stripe_count;    /* over this many objects */
+       __le32 fl_object_size;     /* until objects are this big, then move to new objects */
+       __le32 fl_cas_hash;        /* 0 = none; 1 = sha256 */
 
        /* pg -> disk layout */
-       __u32 fl_object_stripe_unit;  /* for per-object parity, if any */
+       __le32 fl_object_stripe_unit;  /* for per-object parity, if any */
 
        /* object -> pg layout */
-       __s32 fl_pg_preferred; /* preferred primary for pg, if any (-1 = none) */
+       __le32 fl_pg_preferred; /* preferred primary for pg, if any (-1 = none) */
        __u8  fl_pg_type;      /* pg type; see PG_TYPE_* */
        __u8  fl_pg_size;      /* pg size (num replicas, raid stripe width, etc. */
        __u8  fl_pg_pool;      /* implies crush ruleset AND object namespace */
-};
+} __attribute__ ((packed));
+
+#define ceph_file_layout_su(l) ((__s32)le32_to_cpu((l).fl_stripe_unit))
+#define ceph_file_layout_stripe_count(l) ((__s32)le32_to_cpu((l).fl_stripe_count))
+#define ceph_file_layout_object_size(l) ((__s32)le32_to_cpu((l).fl_object_size))
+#define ceph_file_layout_cas_hash(l) ((__s32)le32_to_cpu((l).fl_cas_hash))
+#define ceph_file_layout_object_su(l) ((__s32)le32_to_cpu((l).fl_object_stripe_unit))
+#define ceph_file_layout_pg_preferred(l) ((__s32)le32_to_cpu((l).fl_pg_preferred))
 
-#define ceph_file_layout_stripe_width(l) (l.fl_stripe_unit * l.fl_stripe_count)
+#define ceph_file_layout_stripe_width(l) (le32_to_cpu((l).fl_stripe_unit) * \
+                                         le32_to_cpu((l).fl_stripe_count))
 
 /* period = bytes before i start on a new set of objects */
-#define ceph_file_layout_period(l) (l.fl_object_size * l.fl_stripe_count)
+#define ceph_file_layout_period(l) (le32_to_cpu((l).fl_object_size) *  \
+                                   le32_to_cpu((l).fl_stripe_count))
 
 /*
  * placement group.
index dade396c61f0a71b53c5236031fbb2132aec5e96..fbc4ab71b6acf4ddae1b1948e8b095cad88c2471 100644 (file)
@@ -526,32 +526,33 @@ void calc_file_object_mapping(struct ceph_file_layout *layout,
        loff_t t;
 
        /*su_per_object = layout->fl_object_size / layout->fl_stripe_unit; */
-       su_per_object = layout->fl_object_size;
-       do_div(su_per_object, layout->fl_stripe_unit);
+       su_per_object = le32_to_cpu(layout->fl_object_size);
+       do_div(su_per_object, le32_to_cpu(layout->fl_stripe_unit));
 
-       BUG_ON((layout->fl_stripe_unit & ~PAGE_MASK) != 0);
+       BUG_ON((le32_to_cpu(layout->fl_stripe_unit) & ~PAGE_MASK) != 0);
        /* su = *off / layout->fl_stripe_unit; */
        su = *off;
-       do_div(su, layout->fl_stripe_unit);
+       do_div(su, le32_to_cpu(layout->fl_stripe_unit));
        /* stripeno = su / layout->fl_stripe_count;
           stripepos = su % layout->fl_stripe_count; */
        stripeno = su;
-       stripepos = do_div(stripeno, layout->fl_stripe_count);
+       stripepos = do_div(stripeno, le32_to_cpu(layout->fl_stripe_count));
        /* objsetno = stripeno / su_per_object; */
        objsetno = stripeno;
        do_div(objsetno, su_per_object);
 
-       oid->bno = objsetno * layout->fl_stripe_count + stripepos;
+       oid->bno = objsetno * le32_to_cpu(layout->fl_stripe_count) + stripepos;
        /* *oxoff = *off / layout->fl_stripe_unit; */
        t = *off;
-       *oxoff = do_div(t, layout->fl_stripe_unit);
-       first_oxlen = min_t(loff_t, *len, layout->fl_stripe_unit);
+       *oxoff = do_div(t, le32_to_cpu(layout->fl_stripe_unit));
+       first_oxlen = min_t(loff_t, *len, le32_to_cpu(layout->fl_stripe_unit));
        *oxlen = first_oxlen;
 
        /* multiple stripe units across this object? */
        t = *len;
-       while (t > stripe_len && *oxoff + *oxlen < layout->fl_object_size) {
-               *oxlen += min_t(loff_t, layout->fl_stripe_unit, t);
+       while (t > stripe_len && *oxoff + *oxlen < 
+              le32_to_cpu(layout->fl_object_size)) {
+               *oxlen += min_t(loff_t, le32_to_cpu(layout->fl_stripe_unit), t);
                t -= stripe_len;
        }
 
@@ -572,8 +573,9 @@ void calc_object_layout(struct ceph_object_layout *ol,
        union ceph_pg pgid;
        ceph_ino_t ino = le64_to_cpu(oid->ino);
        unsigned bno = le32_to_cpu(oid->bno);
+       s32 preferred = (s32)le32_to_cpu(fl->fl_pg_preferred);
 
-       if (fl->fl_pg_preferred >= 0) {
+       if (preferred >= 0) {
                num = osdmap->lpg_num;
                num_mask = osdmap->lpg_num_mask;
        } else {
@@ -584,10 +586,10 @@ void calc_object_layout(struct ceph_object_layout *ol,
        pgid.pg64 = 0;   /* start with it zeroed out */
        pgid.pg.ps = ceph_stable_mod(bno + crush_hash32_2(ino, ino>>32),
                                     num, num_mask);
-       pgid.pg.preferred = fl->fl_pg_preferred;
+       pgid.pg.preferred = preferred;
        pgid.pg.type = fl->fl_pg_type;
        pgid.pg.size = fl->fl_pg_size;
 
        ol->ol_pgid = cpu_to_le64(pgid.pg64);
-       ol->ol_stripe_unit = cpu_to_le32(fl->fl_object_stripe_unit);
+       ol->ol_stripe_unit = fl->fl_object_stripe_unit;
 }
index 1d1ce8dbfc8e2be2b672c1baa0c4097b4986cc4d..21c00732deaa41e22907180221cb20f163e6a971 100644 (file)
@@ -289,7 +289,7 @@ public:
   }
 
   int64_t get_layout_size_increment() {
-    return inode.layout.fl_object_size * inode.layout.fl_stripe_count;
+    return ceph_file_layout_period(inode.layout);
   }
 
   // -- misc -- 
index efdd192806d2f634935540caf82e82f33475741c..6e4198b67b57c7d837b4270463e15be46504d2c5 100644 (file)
@@ -174,7 +174,7 @@ void IdAllocator::load(Context *onfinish)
 
   C_ID_Load *c = new C_ID_Load(this, onfinish);
   mds->filer->read(inode,
-                   0, inode.layout.fl_stripe_unit,
+                   0, ceph_file_layout_su(inode.layout),
                    &c->bl, 0,
                    c);
 }
index 3c080c871d0fffe911a77d6c96a153e86a9226f1..65b2d7cc4165346b2d977ff9007cb2956c3f2d66 100644 (file)
@@ -82,7 +82,7 @@ void MDLog::init_journaler()
   log_inode.layout = g_default_mds_log_layout;
   
   if (g_conf.mds_local_osd) 
-    log_inode.layout.fl_pg_preferred = mds->get_nodeid() + g_conf.num_osd;  // hack
+    log_inode.layout.fl_pg_preferred = cpu_to_le32(mds->get_nodeid() + g_conf.num_osd);  // hack
   
   // log streamer
   if (journaler) delete journaler;
index 97e1f8bee7f108ffa8e24522111dd2160932db67..0c3b603ae13d65dd38244eb90546366e400b61cf 100644 (file)
@@ -63,7 +63,7 @@ void SessionMap::load(Context *onload)
   
   C_SM_Load *c = new C_SM_Load(this);
   mds->filer->read(inode,
-                   0, inode.layout.fl_stripe_unit,
+                   0, ceph_file_layout_su(inode.layout),
                    &c->bl, 0,
                    c);
 
index 26e4364403c5b9b76eade0c240ca1ede377f1d7a..770e60559c741335571a190ed616f7a5f4867807 100644 (file)
@@ -443,8 +443,8 @@ private:
   ceph_object_layout file_to_object_layout(object_t oid, ceph_file_layout& layout) {
     return make_object_layout(oid, layout.fl_pg_type, layout.fl_pg_size, 
                              layout.fl_pg_pool,
-                             layout.fl_pg_preferred, 
-                             layout.fl_object_stripe_unit);
+                             ceph_file_layout_pg_preferred(layout),
+                             ceph_file_layout_object_su(layout));
   }
 
   ceph_object_layout make_object_layout(object_t oid, int pg_type, int pg_size, int pg_pool, int preferred=-1, int object_stripe_unit = 0) {
index 5291795be2c53023fd8685981a9adda74e528bc7..54a65bd8fcd1507afb62e47b65338c3e0d7bf3e4 100644 (file)
@@ -133,7 +133,7 @@ void Filer::_probed(Probe *probe, object_t oid, off_t size)
   if (end == 0) {
     // keep probing!
     dout(10) << "_probed didn't find end, probing further" << dendl;
-    off_t period = probe->inode.layout.fl_object_size * probe->inode.layout.fl_stripe_count;
+    off_t period = ceph_file_layout_period(probe->inode.layout);
     probe->from += probe->probing_len;
     probe->probing_len = period;
     _probe(probe);
@@ -171,19 +171,22 @@ void Filer::file_to_extents(inodeno_t ino, ceph_file_layout *layout,
    */
   map< object_t, ObjectExtent > object_extents;
   
-  assert(layout->fl_object_size >= layout->fl_stripe_unit);
-  off_t stripes_per_object = layout->fl_object_size / layout->fl_stripe_unit;
+  __u32 object_size = ceph_file_layout_object_size(*layout);
+  __u32 su = ceph_file_layout_su(*layout);
+  __u32 stripe_count = ceph_file_layout_stripe_count(*layout);
+  assert(object_size >= su);
+  off_t stripes_per_object = object_size / su;
   dout(20) << " stripes_per_object " << stripes_per_object << dendl;
 
   off_t cur = offset;
   off_t left = len;
   while (left > 0) {
     // layout into objects
-    off_t blockno = cur / layout->fl_stripe_unit;          // which block
-    off_t stripeno = blockno / layout->fl_stripe_count;    // which horizontal stripe        (Y)
-    off_t stripepos = blockno % layout->fl_stripe_count;   // which object in the object set (X)
+    off_t blockno = cur / su;          // which block
+    off_t stripeno = blockno / stripe_count;    // which horizontal stripe        (Y)
+    off_t stripepos = blockno % stripe_count;   // which object in the object set (X)
     off_t objectsetno = stripeno / stripes_per_object;       // which object set
-    off_t objectno = objectsetno * layout->fl_stripe_count + stripepos;  // object id
+    off_t objectno = objectsetno * stripe_count + stripepos;  // object id
     
     // find oid, extent
     ObjectExtent *ex = 0;
@@ -197,9 +200,9 @@ void Filer::file_to_extents(inodeno_t ino, ceph_file_layout *layout,
     }
     
     // map range into object
-    off_t block_start = (stripeno % stripes_per_object)*layout->fl_stripe_unit;
-    off_t block_off = cur % layout->fl_stripe_unit;
-    off_t max = layout->fl_stripe_unit - block_off;
+    off_t block_start = (stripeno % stripes_per_object)*su;
+    off_t block_off = cur % su;
+    off_t max = su - block_off;
     
     off_t x_offset = block_start + block_off;
     off_t x_len;
index 78425679b1b4cf039571bb2e322ed714097fee6e..94760fcaf0baff4304c45b38bd146aca53804b68 100644 (file)
@@ -239,7 +239,7 @@ off_t Journaler::append_entry(bufferlist& bl, Context *onsync)
 
   if (!g_conf.journaler_allow_split_entries) {
     // will we span a stripe boundary?
-    int p = inode.layout.fl_stripe_unit;
+    int p = ceph_file_layout_su(inode.layout);
     if (write_pos / p != (write_pos + (off_t)(bl.length() + sizeof(s))) / p) {
       // yes.
       // move write_pos forward.
index 1aae44b2528eb65dcc8f8ac7f2f5c28c4efc8d3e..39866f95884ca19ab31ad89c53f2e0ac0cd1b826 100644 (file)
@@ -184,8 +184,7 @@ public:
     // prefetch intelligently.
     // (watch out, this is big if you use big objects or weird striping)
     if (!fetch_len)
-      fetch_len = inode.layout.fl_object_size*inode.layout.fl_stripe_count *
-       g_conf.journaler_prefetch_periods;
+      fetch_len = ceph_file_layout_period(inode.layout) * g_conf.journaler_prefetch_periods;
     if (!prefetch_from)
       prefetch_from = fetch_len / 2;
   }