Backport #17695
Updated by Loïc Dachary over 7 years ago
https://github.com/ceph/ceph/pull/11644
With the journaling feature enabled, issuing a discard after a write to overlapping extents will result in an assertion failure:
<pre>
librbd/LibrbdWriteback.cc: In function 'virtual void librbd::LibrbdWriteback::overwrite_extent(const object_t&, uint64_t, uint64_t, ceph_tid_t, ceph_tid_t)' thread 7f3f65a18700 time 2016-10-25 09:42:07.681147
librbd/LibrbdWriteback.cc: 295: FAILED assert(m_ictx->owner_lock.is_locked())
ceph version 10.2.3-304-g3ccc17b (3ccc17b81d2794406d803ff4210e930a1fa67455)
1: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x8b) [0x7f3f7a00063b]
2: (librbd::LibrbdWriteback::overwrite_extent(object_t const&, unsigned long, unsigned long, unsigned long, unsigned long)+0x33d) [0x7f3f79ec669d]
3: (ObjectCacher::Object::replace_journal_tid(ObjectCacher::BufferHead*, unsigned long)+0x9b) [0x7f3f79f81cdb]
4: (ObjectCacher::Object::discard(long, long)+0x174) [0x7f3f79f8b7f4]
5: (ObjectCacher::discard_set(ObjectCacher::ObjectSet*, std::vector<ObjectExtent, std::allocator<ObjectExtent> > const&)+0x166) [0x7f3f79f8be96]
6: (()+0x75804d) [0x7f3f79e6804d]
7: (Context::complete(int)+0x9) [0x7f3f79b78549]
8: (ContextWQ::process(Context*)+0xe4) [0x7f3f79c0b454]
9: (ThreadPool::worker(ThreadPool::WorkThread*)+0xa5e) [0x7f3f79ff197e]
10: (ThreadPool::WorkThread::entry()+0x10) [0x7f3f79ff2850]
11: (()+0x7dc5) [0x7f3f6edecdc5]
12: (clone()+0x6d) [0x7f3f6dedaced]
</pre>
Note: this issue only affects the jewel branch.