From ad82fe03473ce709720746a7e3e0b128dea8ea26 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 12 Nov 2008 12:22:12 -0800 Subject: [PATCH] ebofs: implement touch --- src/ebofs/Ebofs.cc | 26 ++++++++++++++++++++++++++ src/ebofs/Ebofs.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/ebofs/Ebofs.cc b/src/ebofs/Ebofs.cc index 01d5f93d4e32a..3eff62ad26eb1 100644 --- a/src/ebofs/Ebofs.cc +++ b/src/ebofs/Ebofs.cc @@ -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) diff --git a/src/ebofs/Ebofs.h b/src/ebofs/Ebofs.h index 789d264fcbc17..58e03ee63b693 100644 --- a/src/ebofs/Ebofs.h +++ b/src/ebofs/Ebofs.h @@ -333,6 +333,7 @@ private: int _get_object_collections(pobject_t oid, set& 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); -- 2.39.5