From: Jianpeng Ma Date: Thu, 5 Feb 2015 02:13:06 +0000 (+0800) Subject: osdc: Don't pass mutex into ObjectCacher::_wait_for_write. X-Git-Tag: v9.0.0~185^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d7cf7aeea5cba1ffa8e51ff1ad2424b1ec161a12;p=ceph.git osdc: Don't pass mutex into ObjectCacher::_wait_for_write. Because the mutex is the same as ObjectCacher::lock. Signed-off-by: Jianpeng Ma --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 5c4654da2f8c..883fccfcfd50 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -7345,9 +7345,7 @@ int Client::_write(Fh *f, int64_t offset, uint64_t size, const char *buf) // async, caching, non-blocking. r = objectcacher->file_write(&in->oset, &in->layout, in->snaprealm->get_snap_context(), - offset, size, bl, ceph_clock_now(cct), 0, - client_lock); - + offset, size, bl, ceph_clock_now(cct), 0); put_cap_ref(in, CEPH_CAP_FILE_BUFFER); if (r < 0) diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 0b8d3e6c37dd..b065534b1f05 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -568,7 +568,7 @@ namespace librbd { wr->extents.push_back(extent); { Mutex::Locker l(cache_lock); - object_cacher->writex(wr, object_set, cache_lock, onfinish); + object_cacher->writex(wr, object_set, onfinish); } } diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index c33e9588d5ac..6fafc3b47120 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -1354,8 +1354,7 @@ void ObjectCacher::retry_waiting_reads() waitfor_read.splice(waitfor_read.end(), ls); } -int ObjectCacher::writex(OSDWrite *wr, ObjectSet *oset, Mutex& wait_on_lock, - Context *onfreespace) +int ObjectCacher::writex(OSDWrite *wr, ObjectSet *oset, Context *onfreespace) { assert(lock.is_locked()); utime_t now = ceph_clock_now(cct); @@ -1428,7 +1427,7 @@ int ObjectCacher::writex(OSDWrite *wr, ObjectSet *oset, Mutex& wait_on_lock, } } - int r = _wait_for_write(wr, bytes_written, oset, wait_on_lock, onfreespace); + int r = _wait_for_write(wr, bytes_written, oset, onfreespace); delete wr; //verify_stats(); @@ -1476,7 +1475,7 @@ void ObjectCacher::maybe_wait_for_writeback(uint64_t len) } // blocking wait for write. -int ObjectCacher::_wait_for_write(OSDWrite *wr, uint64_t len, ObjectSet *oset, Mutex& lock, Context *onfreespace) +int ObjectCacher::_wait_for_write(OSDWrite *wr, uint64_t len, ObjectSet *oset, Context *onfreespace) { assert(lock.is_locked()); int ret = 0; diff --git a/src/osdc/ObjectCacher.h b/src/osdc/ObjectCacher.h index ca23549ceac9..0bef597fdf65 100644 --- a/src/osdc/ObjectCacher.h +++ b/src/osdc/ObjectCacher.h @@ -602,14 +602,12 @@ class ObjectCacher { * the return value is total bytes read */ int readx(OSDRead *rd, ObjectSet *oset, Context *onfinish); - int writex(OSDWrite *wr, ObjectSet *oset, Mutex& wait_on_lock, - Context *onfreespace); + int writex(OSDWrite *wr, ObjectSet *oset, Context *onfreespace); bool is_cached(ObjectSet *oset, vector& extents, snapid_t snapid); private: // write blocking - int _wait_for_write(OSDWrite *wr, uint64_t len, ObjectSet *oset, Mutex& lock, - Context *onfreespace); + int _wait_for_write(OSDWrite *wr, uint64_t len, ObjectSet *oset, Context *onfreespace); void maybe_wait_for_writeback(uint64_t len); bool _flush_set_finish(C_GatherBuilder *gather, Context *onfinish); @@ -678,11 +676,10 @@ public: int file_write(ObjectSet *oset, ceph_file_layout *layout, const SnapContext& snapc, loff_t offset, uint64_t len, - bufferlist& bl, utime_t mtime, int flags, - Mutex& wait_on_lock) { + bufferlist& bl, utime_t mtime, int flags) { OSDWrite *wr = prepare_write(snapc, bl, mtime, flags); Striper::file_to_extents(cct, oset->ino, layout, offset, len, oset->truncate_size, wr->extents); - return writex(wr, oset, wait_on_lock, NULL); + return writex(wr, oset, NULL); } bool file_flush(ObjectSet *oset, ceph_file_layout *layout, const SnapContext& snapc, diff --git a/src/test/osdc/object_cacher_stress.cc b/src/test/osdc/object_cacher_stress.cc index 4f6fffe05c99..ec5f92608274 100644 --- a/src/test/osdc/object_cacher_stress.cc +++ b/src/test/osdc/object_cacher_stress.cc @@ -112,7 +112,7 @@ int stress_test(uint64_t num_ops, uint64_t num_objs, ObjectCacher::OSDWrite *wr = obc.prepare_write(snapc, bl, utime_t(), 0); wr->extents.push_back(op->extent); lock.Lock(); - obc.writex(wr, &object_set, lock, NULL); + obc.writex(wr, &object_set, NULL); lock.Unlock(); } }