ML<I>::set_state_initializing();
}
- m_image_ctx.aio_work_queue->block_writes(new C_InitComplete(this, on_init));
- if ((features & RBD_FEATURE_JOURNALING) != 0) {
- m_image_ctx.aio_work_queue->set_require_lock_on_read();
- }
+ m_image_ctx.aio_work_queue->block_writes(new C_InitComplete(this, features,
+ on_init));
}
template <typename I>
}
template <typename I>
-void ExclusiveLock<I>::handle_init_complete() {
- ldout(m_image_ctx.cct, 10) << dendl;
+void ExclusiveLock<I>::handle_init_complete(uint64_t features) {
+ ldout(m_image_ctx.cct, 10) << "features=" << features << dendl;
+
+ if ((features & RBD_FEATURE_JOURNALING) != 0) {
+ m_image_ctx.aio_work_queue->set_require_lock_on_read();
+ }
Mutex::Locker locker(ML<I>::m_lock);
ML<I>::set_state_unlocked();
on_finish->complete(r);
}
+template <typename I>
+struct ExclusiveLock<I>::C_InitComplete : public Context {
+ ExclusiveLock *exclusive_lock;
+ uint64_t features;
+ Context *on_init;
+
+ C_InitComplete(ExclusiveLock *exclusive_lock, uint64_t features,
+ Context *on_init)
+ : exclusive_lock(exclusive_lock), features(features), on_init(on_init) {
+ }
+ virtual void finish(int r) override {
+ if (r == 0) {
+ exclusive_lock->handle_init_complete(features);
+ }
+ on_init->complete(r);
+ }
+};
+
} // namespace librbd
template class librbd::ExclusiveLock<librbd::ImageCtx>;
* @endverbatim
*/
- struct C_InitComplete : public Context {
- ExclusiveLock *exclusive_lock;
- Context *on_init;
- C_InitComplete(ExclusiveLock *exclusive_lock, Context *on_init)
- : exclusive_lock(exclusive_lock), on_init(on_init) {
- }
- virtual void finish(int r) override {
- if (r == 0) {
- exclusive_lock->handle_init_complete();
- }
- on_init->complete(r);
- }
- };
+ struct C_InitComplete;
ImageCtxT& m_image_ctx;
Context *m_pre_post_callback = nullptr;
int m_acquire_lock_peer_ret_val = 0;
- void handle_init_complete();
+ void handle_init_complete(uint64_t features);
void handle_post_acquiring_lock(int r);
void handle_post_acquired_lock(int r);
};