]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ebofs: implement touch
authorSage Weil <sage@newdream.net>
Wed, 12 Nov 2008 20:22:12 +0000 (12:22 -0800)
committerSage Weil <sage@newdream.net>
Wed, 12 Nov 2008 20:26:44 +0000 (12:26 -0800)
src/ebofs/Ebofs.cc
src/ebofs/Ebofs.h

index 01d5f93d4e32a2fff7b9e82dbb618b776b496f71..3eff62ad26eb1487f73253c485a6d0fcfc3eca10 100644 (file)
@@ -2483,6 +2483,19 @@ unsigned Ebofs::_apply_transaction(Transaction& t)
     int op = t.get_op();
     switch (op) {
  
+    case Transaction::OP_TOUCH:
+      {
+       coll_t cid;
+       t.get_cid(cid);
+        pobject_t oid;
+       t.get_oid(oid);
+        if (_touch(oid) < 0) {
+          dout(7) << "apply_transaction fail on _touch" << dendl;
+          r &= bit;
+        }
+      }
+      break;
+
     case Transaction::OP_WRITE:
       {
        coll_t cid;
@@ -2727,6 +2740,19 @@ unsigned Ebofs::_apply_transaction(Transaction& t)
   return r;
 }
 
+int Ebofs::_touch(pobject_t oid)
+{
+  dout(7) << "_touch " << oid << dendl;
+
+  // get|create inode
+  Onode *on = get_onode(oid);
+  if (!on) {
+    on = new_onode(oid);    // new inode!
+    dirty_onode(on);
+  }
+  put_onode(on);
+  return 0;
+}
 
 
 int Ebofs::_write(pobject_t oid, __u64 offset, size_t length, const bufferlist& bl)
index 789d264fcbc174ba8ebed75cdd41cdb1e989ae02..58e03ee63b693549619d3cb0349ca90aa09f9604 100644 (file)
@@ -333,6 +333,7 @@ private:
   int _get_object_collections(pobject_t oid, set<coll_t>& ls);
 
   bool _write_will_block();
+  int _touch(pobject_t oid);
   int _write(pobject_t oid, __u64 off, size_t len, const bufferlist& bl);
   void _trim_from_cache(pobject_t oid, __u64 off, size_t len);
   int _truncate(pobject_t oid, __u64 size);