]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add truncate_size
authorSage Weil <sage@newdream.net>
Sat, 24 Jan 2009 05:22:57 +0000 (21:22 -0800)
committerSage Weil <sage@newdream.net>
Fri, 30 Jan 2009 19:44:33 +0000 (11:44 -0800)
src/client/Client.cc
src/client/Client.h
src/include/ceph_fs.h
src/mds/CInode.cc
src/mds/mdstypes.h
src/messages/MClientCaps.h
src/messages/MClientReply.h

index 936fb5ae170aa5a6e7da6d86aeee7a306446d280..a9a4ab82a99391d779a9d4226e7cd299a3235abe 100644 (file)
@@ -323,7 +323,8 @@ void Client::trim_cache()
 
 
 void Client::update_inode_file_bits(Inode *in,
-                                   __u64 truncate_seq, __u64 size,
+                                   __u64 truncate_seq, __u64 truncate_size,
+                                   __u64 size,
                                    __u64 time_warp_seq, utime_t ctime,
                                    utime_t mtime,
                                    utime_t atime,
@@ -336,6 +337,7 @@ void Client::update_inode_file_bits(Inode *in,
     dout(10) << "size " << in->inode.size << " -> " << size << dendl;
     in->inode.size = size;
     in->reported_size = size;
+    in->inode.truncate_size = truncate_size;
   }
 
   // be careful with size, mtime, atime
@@ -427,7 +429,7 @@ void Client::update_inode(Inode *in, InodeStat *st, utime_t from, int mds)
     in->inode.ctime = st->ctime;
     in->inode.max_size = st->max_size;  // right?
 
-    update_inode_file_bits(in, st->truncate_seq, st->size,
+    update_inode_file_bits(in, st->truncate_seq, st->truncate_size, st->size,
                           st->time_warp_seq, st->ctime, st->mtime, st->atime,
                           in->caps_issued());
   }
@@ -1492,6 +1494,7 @@ void Client::send_cap(Inode *in, int mds, InodeCap *cap, int used, int want, int
   m->head.size = in->inode.size;
   m->head.max_size = in->inode.max_size;
   m->head.truncate_seq = in->inode.truncate_seq;
+  m->head.truncate_size = in->inode.truncate_size;
   in->inode.mtime.encode_timeval(&m->head.mtime);
   in->inode.atime.encode_timeval(&m->head.atime);
   in->inode.ctime.encode_timeval(&m->head.ctime);
@@ -2249,7 +2252,7 @@ void Client::handle_cap_grant(Inode *in, int mds, InodeCap *cap, MClientCaps *m)
     ::decode(in->xattrs, p);
     in->inode.xattr_version = m->head.xattr_version;
   }
-  update_inode_file_bits(in, m->get_truncate_seq(), m->get_size(),
+  update_inode_file_bits(in, m->get_truncate_seq(), m->get_truncate_size(), m->get_size(),
                         m->get_time_warp_seq(), m->get_ctime(), m->get_mtime(), m->get_atime(), old_caps);
 
   // max_size
index c6bff9ac1151c3ddf087f649d562664200f22ab1..5e44091d4d3f142baab1a908cdfb4be4cd6ddb56 100644 (file)
@@ -871,7 +871,7 @@ protected:
 
   Inode* insert_trace(MClientReply *reply, utime_t ttl, int mds);
   void update_inode_file_bits(Inode *in,
-                             __u64 truncat_seq,__u64 size,
+                             __u64 truncate_seq, __u64 truncate_size, __u64 size,
                              __u64 time_warp_seq, utime_t ctime, utime_t mtime, utime_t atime,
                              int issued);
   void update_inode(Inode *in, InodeStat *st, utime_t ttl, int mds);
index 7822eba8a7872814a5f23508dd45482798ac372a..55329235bdec4ab1b6daa12194d6f53a17c07e5d 100644 (file)
@@ -842,7 +842,7 @@ struct ceph_mds_reply_inode {
        struct ceph_file_layout layout;
        struct ceph_timespec ctime, mtime, atime;
        __le32 time_warp_seq;
-       __le64 size, max_size, truncate_seq;
+       __le64 size, max_size, truncate_seq, truncate_size;
        __le32 mode, uid, gid;
        __le32 nlink;
        __le64 files, subdirs, rbytes, rfiles, rsubdirs;  /* dir stats */
@@ -1051,7 +1051,7 @@ struct ceph_mds_caps {
        __le64 xattr_version;
 
        /* filelock */
-       __le64 size, max_size;
+       __le64 size, max_size, truncate_size;
        __le32 truncate_seq;
        struct ceph_timespec mtime, atime, ctime;
        struct ceph_file_layout layout;
@@ -1286,6 +1286,7 @@ struct ceph_osd_op {
        union {
                struct {
                        __le64 offset, length;
+                       __le32 seq;
                };
                struct {
                        __le32 name_len;
index 8b16a9e38093137bc54ec6003f8c4404225b49a1..60a766377247e0c8c54f8b63715899a2a4efea87 100644 (file)
@@ -1404,6 +1404,7 @@ bool CInode::encode_inodestat(bufferlist& bl, Session *session,
   e.size = i->size;
   e.max_size = i->max_size;
   e.truncate_seq = i->truncate_seq;
+  e.truncate_size = i->truncate_size;
   i->mtime.encode_timeval(&e.mtime);
   i->atime.encode_timeval(&e.atime);
   e.time_warp_seq = i->time_warp_seq;
@@ -1536,6 +1537,7 @@ void CInode::encode_cap_message(MClientCaps *m, Capability *cap)
   m->head.size = i->size;
   m->head.max_size = i->max_size;
   m->head.truncate_seq = i->truncate_seq;
+  m->head.truncate_size = i->truncate_size;
   i->mtime.encode_timeval(&m->head.mtime);
   i->atime.encode_timeval(&m->head.atime);
   m->head.time_warp_seq = i->time_warp_seq;
index 8674109c29792deee19bd108150be567d33adff3..d2410d35dc32f6f47fe6f18ef2b3f518cb8c780f 100644 (file)
@@ -295,6 +295,7 @@ struct inode_t {
   uint64_t   size;        // on directory, # dentries
   uint64_t   max_size;    // client(s) are auth to write this much...
   uint32_t   truncate_seq;
+  uint64_t   truncate_size;
   utime_t    mtime;   // file data modify time.
   utime_t    atime;   // file data access time.
   uint32_t   time_warp_seq;  // count of (potential) mtime/atime timewarps (i.e., utimes())
@@ -329,6 +330,7 @@ struct inode_t {
     ::encode(size, bl);
     ::encode(max_size, bl);
     ::encode(truncate_seq, bl);
+    ::encode(truncate_size, bl);
     ::encode(mtime, bl);
     ::encode(atime, bl);
     ::encode(time_warp_seq, bl);
@@ -357,6 +359,7 @@ struct inode_t {
     ::decode(size, p);
     ::decode(max_size, p);
     ::decode(truncate_seq, p);
+    ::decode(truncate_size, p);
     ::decode(mtime, p);
     ::decode(atime, p);
     ::decode(time_warp_seq, p);
index 974f559485887fc8bce4a9a80e441780ccebd685..c1221af0bf4ceca0146a56b698774109ab17a731 100644 (file)
@@ -37,6 +37,7 @@ class MClientCaps : public Message {
   __u64 get_size() { return head.size;  }
   __u64 get_max_size() { return head.max_size;  }
   __u32 get_truncate_seq() { return head.truncate_seq; }
+  __u64 get_truncate_size() { return head.truncate_size; }
   utime_t get_ctime() { return utime_t(head.ctime); }
   utime_t get_mtime() { return utime_t(head.mtime); }
   utime_t get_atime() { return utime_t(head.atime); }
index 5b98f1f72480002a91989434052b7147a9a643b5..c5367a7f5a41489a80b022ac166af75e7a6336f4 100644 (file)
@@ -101,6 +101,7 @@ struct InodeStat {
   unsigned mode, uid, gid, nlink, rdev;
   loff_t size, max_size;
   version_t truncate_seq;
+  __u64 truncate_size;
   utime_t ctime, mtime, atime;
   version_t time_warp_seq;
 
@@ -131,6 +132,7 @@ struct InodeStat {
     size = e.size;
     max_size = e.max_size;
     truncate_seq = e.truncate_seq;
+    truncate_size = e.truncate_size;
     ctime.decode_timeval(&e.ctime);
     mtime.decode_timeval(&e.mtime);
     atime.decode_timeval(&e.atime);