From: Josh Durgin Date: Sun, 1 Feb 2015 20:17:34 +0000 (+0100) Subject: Merge branch 'librbd-cache-iohint' of git://github.com/majianpeng/ceph X-Git-Tag: v0.93~139 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b40cb61653d0ce6d0e7cf3a9a046c81080f600af;p=ceph.git Merge branch 'librbd-cache-iohint' of git://github.com/majianpeng/ceph Reviewed-by: Sage Weil Reviewed-by: Josh Durgin Conflicts: src/librbd/ImageCtx.cc src/librbd/ImageCtx.h src/osdc/ObjectCacher.cc src/osdc/ObjectCacher.h --- b40cb61653d0ce6d0e7cf3a9a046c81080f600af diff --cc src/librbd/ImageCtx.cc index 0bd2372e1114,92da3194e2d6..f8649e28e611 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@@ -488,13 -485,12 +488,14 @@@ namespace librbd return -ENOENT; } - void ImageCtx::aio_read_from_cache(object_t o, bufferlist *bl, size_t len, - uint64_t off, Context *onfinish, int fadvise_flags) { + void ImageCtx::aio_read_from_cache(object_t o, uint64_t object_no, + bufferlist *bl, size_t len, - uint64_t off, Context *onfinish) { ++ uint64_t off, Context *onfinish, ++ int fadvise_flags) { snap_lock.get_read(); - ObjectCacher::OSDRead *rd = object_cacher->prepare_read(snap_id, bl, 0); + ObjectCacher::OSDRead *rd = object_cacher->prepare_read(snap_id, bl, fadvise_flags); snap_lock.put_read(); - ObjectExtent extent(o, 0 /* a lie */, off, len, 0); + ObjectExtent extent(o, object_no, off, len, 0); extent.oloc.pool = data_ctx.get_id(); extent.buffer_extents.push_back(make_pair(0, len)); rd->extents.push_back(extent); @@@ -505,11 -501,11 +506,12 @@@ onfinish->complete(r); } - void ImageCtx::write_to_cache(object_t o, bufferlist& bl, size_t len, - uint64_t off, Context *onfinish, int fadvise_flags) { + void ImageCtx::write_to_cache(object_t o, const bufferlist& bl, size_t len, - uint64_t off, Context *onfinish) { ++ uint64_t off, Context *onfinish, ++ int fadvise_flags) { snap_lock.get_read(); ObjectCacher::OSDWrite *wr = object_cacher->prepare_write(snapc, bl, - utime_t(), 0); + utime_t(), fadvise_flags); snap_lock.put_read(); ObjectExtent extent(o, 0, off, len, 0); extent.oloc.pool = data_ctx.get_id(); @@@ -530,7 -526,7 +532,7 @@@ Cond cond; bool done; Context *onfinish = new C_SafeCond(&mylock, &cond, &done, &r); - aio_read_from_cache(o, object_no, bl, len, off, onfinish); - aio_read_from_cache(o, bl, len, off, onfinish, 0); ++ aio_read_from_cache(o, object_no, bl, len, off, onfinish, 0); mylock.Lock(); while (!done) cond.Wait(mylock); diff --cc src/librbd/ImageCtx.h index 16a46aaf13f5,df9c84988d83..5dd5b8adbf9f --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@@ -161,12 -155,11 +161,13 @@@ namespace librbd uint64_t get_parent_snap_id(librados::snap_t in_snap_id) const; int get_parent_overlap(librados::snap_t in_snap_id, uint64_t *overlap) const; - void aio_read_from_cache(object_t o, bufferlist *bl, size_t len, - uint64_t off, Context *onfinish, int fadvise_flags); - void write_to_cache(object_t o, bufferlist& bl, size_t len, uint64_t off, - Context *onfinish, int fadivse_flags); - int read_from_cache(object_t o, bufferlist *bl, size_t len, uint64_t off); + void aio_read_from_cache(object_t o, uint64_t object_no, bufferlist *bl, - size_t len, uint64_t off, Context *onfinish); ++ size_t len, uint64_t off, Context *onfinish, ++ int fadvise_flags); + void write_to_cache(object_t o, const bufferlist& bl, size_t len, - uint64_t off, Context *onfinish); ++ uint64_t off, Context *onfinish, int fadvise_flags); + int read_from_cache(object_t o, uint64_t object_no, bufferlist *bl, + size_t len, uint64_t off); void user_flushed(); void flush_cache_aio(Context *onfinish); int flush_cache(); diff --cc src/librbd/internal.cc index 64b95a9950b8,7cf63ae8eaa7..c77e40646e83 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@@ -3437,9 -3795,9 +3437,9 @@@ reprotect_and_return_err Context *req_comp = new C_RBD_Readahead(ictx, q->oid, q->offset, q->length); ictx->readahead.inc_pending(); - ictx->aio_read_from_cache(q->oid, NULL, + ictx->aio_read_from_cache(q->oid, q->objectno, NULL, q->length, q->offset, - req_comp); + req_comp, 0); } } ictx->perfcounter->inc(l_librbd_readahead); @@@ -3512,9 -3869,9 +3512,9 @@@ if (ictx->object_cacher) { C_CacheRead *cache_comp = new C_CacheRead(req); - ictx->aio_read_from_cache(q->oid, &req->data(), + ictx->aio_read_from_cache(q->oid, q->objectno, &req->data(), q->length, q->offset, - cache_comp); + cache_comp, op_flags); } else { r = req->send(); if (r == -ENOENT) diff --cc src/osdc/ObjectCacher.cc index ee79da733dd7,3ee61991c846..70426b643790 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@@ -1046,8 -1064,9 +1068,9 @@@ int ObjectCacher::_readx(OSDRead *rd, O // get Object cache sobject_t soid(ex_it->oid, rd->snap); - Object *o = get_object(soid, oset, ex_it->oloc, ex_it->truncate_size, oset->truncate_seq); + Object *o = get_object(soid, ex_it->objectno, oset, ex_it->oloc, ex_it->truncate_size, oset->truncate_seq); - touch_ob(o); + if (external_call) + touch_ob(o); // does not exist and no hits? if (oset->return_enoent && !o->exists) { diff --cc src/osdc/ObjectCacher.h index 3b6561b96af6,0c6e71cf9281..880e6eb6b6dc --- a/src/osdc/ObjectCacher.h +++ b/src/osdc/ObjectCacher.h @@@ -70,13 -70,11 +70,13 @@@ class ObjectCacher SnapContext snapc; bufferlist bl; utime_t mtime; - int flags; + int fadvise_flags; - OSDWrite(const SnapContext& sc, bufferlist& b, utime_t mt, int f) : snapc(sc), bl(b), mtime(mt), fadvise_flags(f) {} + OSDWrite(const SnapContext& sc, const bufferlist& b, utime_t mt, int f) - : snapc(sc), bl(b), mtime(mt), flags(f) {} ++ : snapc(sc), bl(b), mtime(mt), fadvise_flags(f) {} }; - OSDWrite *prepare_write(const SnapContext& sc, bufferlist &b, utime_t mt, int f) { + OSDWrite *prepare_write(const SnapContext& sc, const bufferlist &b, + utime_t mt, int f) { return new OSDWrite(sc, b, mt, f); }