]> git.proxmox.com Git - ceph.git/blame - ceph/src/librbd/image/CloseRequest.h
update sources to v12.1.0
[ceph.git] / ceph / src / librbd / image / CloseRequest.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_LIBRBD_IMAGE_CLOSE_REQUEST_H
5#define CEPH_LIBRBD_IMAGE_CLOSE_REQUEST_H
6
7#include "librbd/ImageCtx.h"
8
9class Context;
10
11namespace librbd {
12
13class ImageCtx;
14
15namespace image {
16
17template <typename ImageCtxT = ImageCtx>
18class CloseRequest {
19public:
20 static CloseRequest *create(ImageCtxT *image_ctx, Context *on_finish) {
21 return new CloseRequest(image_ctx, on_finish);
22 }
23
24 void send();
25
26private:
27 /**
28 * @verbatim
29 *
30 * <start>
31 * |
32 * v
31f18b77 33 * BLOCK_IMAGE_WATCHER (skip if R/O)
7c673cae
FG
34 * |
35 * v
31f18b77 36 * SHUT_DOWN_UPDATE_WATCHERS
7c673cae
FG
37 * |
38 * v
39 * SHUT_DOWN_AIO_WORK_QUEUE . . .
31f18b77 40 * | . (exclusive lock disabled)
7c673cae 41 * v v
31f18b77
FG
42 * SHUT_DOWN_EXCLUSIVE_LOCK FLUSH
43 * | .
44 * | . . . . . . . . . . .
45 * | .
46 * v v
47 * UNREGISTER_IMAGE_WATCHER (skip if R/O)
7c673cae
FG
48 * |
49 * v
50 * FLUSH_READAHEAD
51 * |
52 * v
53 * SHUTDOWN_CACHE
54 * |
55 * v
56 * FLUSH_OP_WORK_QUEUE . . . . .
57 * | .
58 * v .
59 * CLOSE_PARENT . (no parent)
60 * | .
61 * v .
62 * FLUSH_IMAGE_WATCHER < . . . .
63 * |
64 * v
65 * <finish>
66 *
67 * @endverbatim
68 */
69
70 CloseRequest(ImageCtxT *image_ctx, Context *on_finish);
71
72 ImageCtxT *m_image_ctx;
73 Context *m_on_finish;
74
75 int m_error_result;
76
77 decltype(m_image_ctx->exclusive_lock) m_exclusive_lock;
78
31f18b77
FG
79 void send_block_image_watcher();
80 void handle_block_image_watcher(int r);
81
7c673cae
FG
82 void send_shut_down_update_watchers();
83 void handle_shut_down_update_watchers(int r);
84
7c673cae
FG
85 void send_shut_down_io_queue();
86 void handle_shut_down_io_queue(int r);
87
88 void send_shut_down_exclusive_lock();
89 void handle_shut_down_exclusive_lock(int r);
90
91 void send_flush();
92 void handle_flush(int r);
93
31f18b77
FG
94 void send_unregister_image_watcher();
95 void handle_unregister_image_watcher(int r);
96
7c673cae
FG
97 void send_flush_readahead();
98 void handle_flush_readahead(int r);
99
100 void send_shut_down_cache();
101 void handle_shut_down_cache(int r);
102
103 void send_flush_op_work_queue();
104 void handle_flush_op_work_queue(int r);
105
106 void send_close_parent();
107 void handle_close_parent(int r);
108
109 void send_flush_image_watcher();
110 void handle_flush_image_watcher(int r);
111
112 void finish();
113
114 void save_result(int result) {
115 if (m_error_result == 0 && result < 0) {
116 m_error_result = result;
117 }
118 }
119};
120
121} // namespace image
122} // namespace librbd
123
124extern template class librbd::image::CloseRequest<librbd::ImageCtx>;
125
126#endif // CEPH_LIBRBD_IMAGE_CLOSE_REQUEST_H