]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
utime_t cleanup
authorSage Weil <sage@newdream.net>
Mon, 21 Jan 2008 20:33:18 +0000 (12:33 -0800)
committerSage Weil <sage@newdream.net>
Tue, 22 Jan 2008 03:07:02 +0000 (19:07 -0800)
src/TODO
src/client/Client.cc
src/config.cc
src/include/types.h
src/include/utime.h
src/kernel/addr.c
src/kernel/file.c
src/messages/MClientFileCaps.h
src/messages/MClientReply.h
src/osd/OSD.cc
src/osd/OSDMap.h

index fec49c7ca67f83a08b27c32899f2663184d264b6..36a3cf05ffe49d2aef7b70b688830aa53df470f1 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -23,6 +23,7 @@ kernel client
 - msgr layer
   - callbacks for 'remote reset'
   - idle state, to keep connect_seq around after a disconnect
+  - make sure the radix_tree to list_head thing works right with __remove_connection..
 - audit locking
 - audit use of kmalloc vs spinlocks
 - convert most everything in ceph_fs.h to le32/le64 notation, cleaning up userspace appropriately
@@ -31,6 +32,7 @@ kernel client
  - getattr should do an lstat?
  - d_revalidate?
  - test truncate
+- is ino_t really still 32 bits on i386??  hrm!
 - mds client
 /  - handle file caps, ack back to mds, etc. 
     - actually flush dirty data, too
index f557b6bebb58de8de5fafe67ff176d6cc8b034a6..44d695bb98cdd39d06b7f2622813e7caf5c710a4 100644 (file)
@@ -2184,8 +2184,8 @@ int Client::_utimes(const char *path, utime_t mtime, utime_t atime)
   dout(3) << "_utimes(" << path << ", " << mtime << ", " << atime << ")" << dendl;
   MClientRequest *req = new MClientRequest(CEPH_MDS_OP_UTIME, messenger->get_myinst());
   req->set_path(path); 
-  req->head.args.utime.mtime = mtime.tv_ref();
-  req->head.args.utime.atime = atime.tv_ref();
+  mtime.encode_timeval(&req->head.args.utime.mtime);
+  atime.encode_timeval(&req->head.args.utime.atime);
 
   // FIXME where does FUSE maintain user information
   req->set_caller_uid(getuid());
index 9cca65d00c148e8f976925317a31554edbabdd85..28bc7d618bb1a709cb926ca2396eb10b6586ea28 100644 (file)
@@ -49,8 +49,8 @@ int _get_bits_of(int v) {
   return n;
 }
 unsigned _page_size = sysconf(_SC_PAGESIZE);
-unsigned _page_mask = ~(_page_size - 1);
-unsigned long _page_shift = _get_bits_of(_page_size);
+unsigned long _page_mask = ~(_page_size - 1);
+unsigned _page_shift = _get_bits_of(_page_size);
 
 // file layouts
 struct ceph_file_layout g_OSD_FileLayout = {
index 914fc1d744f29fa28c0ce57895a336f1436b844c..9f474abb3d760706ba89974b0ba95b749e0b1a1b 100644 (file)
@@ -110,9 +110,9 @@ struct ltstr
 // some basic types
 
 // NOTE: these must match ceph_fs.h typedefs
-typedef uint64_t tid_t;         // transaction id
-typedef uint64_t version_t;
-typedef uint32_t epoch_t;       // map epoch  (32bits -> 13 epochs/second for 10 years)
+typedef __u64 tid_t;         // transaction id
+typedef __u64 version_t;
+typedef __u32 epoch_t;       // map epoch  (32bits -> 13 epochs/second for 10 years)
 
 
 #define O_LAZY 01000000
@@ -125,7 +125,7 @@ typedef ceph_file_layout FileLayout;
 // --------------------------------------
 // inode
 
-typedef __uint64_t _inodeno_t;
+typedef __u64 _inodeno_t;
 
 struct inodeno_t {
   _inodeno_t val;
index f0dec0ecc4cb5a44a1ae3004c0124d92931bf474..ee30df15b8a58b60843b10ab13f1350657c0b5ba 100644 (file)
 #include <time.h>
 #include "ceph_fs.h"
 
+#include "buffer.h"
+#include "encodable.h"
+
 // --------
 // utime_t
 
 class utime_t {
-  struct ceph_timeval tv;
+  struct {
+    __u32 tv_sec, tv_usec;
+  } tv;
 
   friend class Clock;
  
@@ -40,7 +45,9 @@ class utime_t {
   utime_t() { tv.tv_sec = 0; tv.tv_usec = 0; normalize(); }
   //utime_t(time_t s) { tv.tv_sec = s; tv.tv_usec = 0; }
   utime_t(time_t s, int u) { tv.tv_sec = s; tv.tv_usec = u; normalize(); }
-  utime_t(const struct ceph_timeval &v) : tv(v) {}
+  utime_t(const struct ceph_timeval &v) {
+    decode_timeval(&v);
+  }
   utime_t(const struct timeval &v) {
     set_from_timeval(&v);
   }
@@ -70,10 +77,23 @@ class utime_t {
     tv.tv_sec = v->tv_sec;
     tv.tv_usec = v->tv_usec;
   }
-  //struct timeval& timeval()  { return tv; }
-  //struct timeval& tv_ref() { return tv; }
 
-  struct ceph_timeval& tv_ref() { return tv; }
+  void encode_timeval(struct ceph_timeval *t) const {
+    t->tv_sec = cpu_to_le32(tv.tv_sec);
+    t->tv_usec = cpu_to_le32(tv.tv_usec);
+  }
+  void decode_timeval(const struct ceph_timeval *t) {
+    tv.tv_sec = le32_to_cpu(t->tv_sec);
+    tv.tv_usec = le32_to_cpu(t->tv_usec);
+  }
+  void _encode(bufferlist &bl) {
+    ::_encode_simple(tv.tv_sec, bl);
+    ::_encode_simple(tv.tv_usec, bl);
+  }
+  void _decode(bufferlist &bl, int& off) {
+    ::_decode(tv.tv_sec, bl, off);
+    ::_decode(tv.tv_usec, bl, off);
+  }
 
   // cast to double
   operator double() {
index 217bc7e3cf8ee9f202610ffd5a172315ca3b33ba..b569473577556e09a8e85ff0870def88df3175f0 100644 (file)
@@ -57,4 +57,5 @@ out_unlock:
 const struct address_space_operations ceph_aops = {
        .readpage = ceph_readpage,
 //     .readpages = ceph_readpages
+       .writepage = ceph_writepage,
 };
index edcfc263a8e24f5cbd62e5940d202f6de611260d..1d7df9ee25859b764d040473ef475cbd42c48b8c 100644 (file)
@@ -112,6 +112,33 @@ const struct inode_operations ceph_file_iops = {
 */
 };
 
+
+/*
+ * totally naive write.  just to get things sort of working.
+ */
+int ceph_silly_write(struct file *filp, const char __user * data,
+                    size_t count, loff_t * offset)
+{
+       struct inode *inode = filp->f_path.dentry->d_inode;
+       struct ceph_inode_info *ci = ceph_inode(inode);
+       struct ceph_file_info *cf = file->private_data;
+       int ret = 0;
+
+       dout(10, "silly_write on file %p %lld~%u\n", filp, offset, count);
+       
+       /* ignore caps, for now. */
+       
+       if (ret > 0)
+               *offset += ret;
+
+       if (*offset > inode->i_size) {
+               inode->i_size = *offset;
+               inode->i_blocks = (inode->i_size + 512 - 1) >> 9;
+       }       
+       invalidate_inode_pages2(inode->i_mapping);
+       return ret;
+}
+
 const struct file_operations ceph_file_fops = {
        .open = ceph_open,
        .release = ceph_release,
index bf8c97f91f5e2176c0fd0cfa4723e285ea798b00..3cec527dbc8197f99ba511349056021ca28a322f 100644 (file)
@@ -56,8 +56,8 @@ class MClientFileCaps : public Message {
   void set_op(int o) { h.op = cpu_to_le32(o); }
 
   void set_size(loff_t s) { h.size = cpu_to_le64(s); }
-  void set_mtime(utime_t t) { h.mtime = t.tv_ref(); }
-  void set_atime(utime_t t) { h.atime = t.tv_ref(); }
+  void set_mtime(const utime_t &t) { t.encode_timeval(&h.mtime); }
+  void set_atime(const utime_t &t) { t.encode_timeval(&h.atime); }
 
   MClientFileCaps() {}
   MClientFileCaps(int op,
@@ -76,8 +76,8 @@ class MClientFileCaps : public Message {
     h.size = cpu_to_le64(inode.size);
     h.migrate_mds = cpu_to_le32(mmds);
     h.migrate_seq = cpu_to_le32(mseq);
-    h.mtime = inode.mtime.tv_ref();
-    h.atime = inode.atime.tv_ref();
+    inode.mtime.encode_timeval(&h.mtime);
+    inode.atime.encode_timeval(&h.atime);
   }
 
   const char *get_type_name() { return "Cfcap";}
index 466a6c3b5014931f441b454565ebbff97b9bdbce..bdd3c6e26e14e9368ad55ed01a61473738ca16d6 100644 (file)
@@ -107,9 +107,9 @@ struct InodeStat {
     ::_decode_simple(e, p);
     inode.ino = e.ino;
     inode.layout = e.layout;
-    inode.ctime.tv_ref() = e.ctime;
-    inode.mtime.tv_ref() = e.mtime;
-    inode.atime.tv_ref() = e.atime;
+    inode.ctime.decode_timeval(&e.ctime);
+    inode.mtime.decode_timeval(&e.mtime);
+    inode.atime.decode_timeval(&e.atime);
     inode.mode = e.mode;
     inode.uid = e.uid;
     inode.gid = e.gid;
@@ -144,9 +144,9 @@ struct InodeStat {
     memset(&e, 0, sizeof(e));
     e.ino = in->inode.ino;
     e.layout = in->inode.layout;
-    e.ctime = in->inode.ctime.tv_ref();
-    e.mtime = in->inode.mtime.tv_ref();
-    e.atime = in->inode.atime.tv_ref();
+    in->inode.ctime.encode_timeval(&e.ctime);
+    in->inode.mtime.encode_timeval(&e.mtime);
+    in->inode.atime.encode_timeval(&e.atime);
     e.mode = in->inode.mode;
     e.uid = in->inode.uid;
     e.gid = in->inode.gid;
index be5244bbcaa999d8db8b25fa64c5db4c51d55a59..92f05ba555c00002dc081193cb711104080f5bae 100644 (file)
@@ -647,7 +647,7 @@ void OSD::_refresh_my_stat(utime_t now)
   if (now - my_stat.stamp > g_conf.osd_stat_refresh_interval ||
       pending_ops > 2*my_stat.qlen) {
 
-    my_stat.stamp = now.tv_ref();
+    now.encode_timeval(&my_stat.stamp);
     my_stat.oprate = stat_oprate.get(now);
 
     //read_latency_calc.set_size( 20 );  // hrm.
index 6ffbf98359027311122ddb9b3503de58ea11a012..118fb790728469c954c1e795c21e9dd6afd0f2b8 100644 (file)
@@ -88,7 +88,7 @@ public:
       ::_encode(fsid, bl);
       ::_encode(epoch, bl); 
       ::_encode(mon_epoch, bl);
-      ::_encode(ctime, bl);
+      ctime._encode(bl);
       ::_encode(fullmap, bl);
       ::_encode(crush, bl);
       ::_encode(new_max_osd, bl);
@@ -102,7 +102,7 @@ public:
       ::_decode(fsid, bl, off);
       ::_decode(epoch, bl, off);
       ::_decode(mon_epoch, bl, off);
-      ::_decode(ctime, bl, off);
+      ctime._decode(bl, off);
       ::_decode(fullmap, bl, off);
       ::_decode(crush, bl, off);
       ::_decode(new_max_osd, bl, off);