diff options
| author | Ilya Dryomov <idryomov@gmail.com> | 2016-04-28 10:07:27 -0400 |
|---|---|---|
| committer | Ilya Dryomov <idryomov@gmail.com> | 2016-05-25 19:15:29 -0400 |
| commit | d0b19705e99939f5ae5aa9b57bfe41dd4777d951 (patch) | |
| tree | 22c6202c5fc1bf28ac95fdf2157329aa171270e5 /include/linux/ceph | |
| parent | b07d3c4bd7270c74e2b6803af8ac8a00cb3e5ed2 (diff) | |
libceph: async MON client generic requests
For map check, we are going to need to send CEPH_MSG_MON_GET_VERSION
messages asynchronously and get a callback on completion. Refactor MON
client to allow firing off generic requests asynchronously and add an
async variant of ceph_monc_get_version(). ceph_monc_do_statfs() is
switched over and remains sync.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'include/linux/ceph')
| -rw-r--r-- | include/linux/ceph/mon_client.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/include/linux/ceph/mon_client.h b/include/linux/ceph/mon_client.h index c14e9d861cda..19800d9b45f3 100644 --- a/include/linux/ceph/mon_client.h +++ b/include/linux/ceph/mon_client.h | |||
| @@ -39,20 +39,31 @@ struct ceph_mon_request { | |||
| 39 | ceph_monc_request_func_t do_request; | 39 | ceph_monc_request_func_t do_request; |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | typedef void (*ceph_monc_callback_t)(struct ceph_mon_generic_request *); | ||
| 43 | |||
| 42 | /* | 44 | /* |
| 43 | * ceph_mon_generic_request is being used for the statfs and | 45 | * ceph_mon_generic_request is being used for the statfs and |
| 44 | * mon_get_version requests which are being done a bit differently | 46 | * mon_get_version requests which are being done a bit differently |
| 45 | * because we need to get data back to the caller | 47 | * because we need to get data back to the caller |
| 46 | */ | 48 | */ |
| 47 | struct ceph_mon_generic_request { | 49 | struct ceph_mon_generic_request { |
| 50 | struct ceph_mon_client *monc; | ||
| 48 | struct kref kref; | 51 | struct kref kref; |
| 49 | u64 tid; | 52 | u64 tid; |
| 50 | struct rb_node node; | 53 | struct rb_node node; |
| 51 | int result; | 54 | int result; |
| 52 | void *buf; | 55 | |
| 53 | struct completion completion; | 56 | struct completion completion; |
| 57 | ceph_monc_callback_t complete_cb; | ||
| 58 | u64 private_data; /* r_tid/linger_id */ | ||
| 59 | |||
| 54 | struct ceph_msg *request; /* original request */ | 60 | struct ceph_msg *request; /* original request */ |
| 55 | struct ceph_msg *reply; /* and reply */ | 61 | struct ceph_msg *reply; /* and reply */ |
| 62 | |||
| 63 | union { | ||
| 64 | struct ceph_statfs *st; | ||
| 65 | u64 newest; | ||
| 66 | } u; | ||
| 56 | }; | 67 | }; |
| 57 | 68 | ||
| 58 | struct ceph_mon_client { | 69 | struct ceph_mon_client { |
| @@ -124,8 +135,10 @@ extern int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch, | |||
| 124 | extern int ceph_monc_do_statfs(struct ceph_mon_client *monc, | 135 | extern int ceph_monc_do_statfs(struct ceph_mon_client *monc, |
| 125 | struct ceph_statfs *buf); | 136 | struct ceph_statfs *buf); |
| 126 | 137 | ||
| 127 | extern int ceph_monc_do_get_version(struct ceph_mon_client *monc, | 138 | int ceph_monc_get_version(struct ceph_mon_client *monc, const char *what, |
| 128 | const char *what, u64 *newest); | 139 | u64 *newest); |
| 140 | int ceph_monc_get_version_async(struct ceph_mon_client *monc, const char *what, | ||
| 141 | ceph_monc_callback_t cb, u64 private_data); | ||
| 129 | 142 | ||
| 130 | extern int ceph_monc_open_session(struct ceph_mon_client *monc); | 143 | extern int ceph_monc_open_session(struct ceph_mon_client *monc); |
| 131 | 144 | ||
