libceph: introduce alloc_watch_request()
ceph_osdc_alloc_messages() call will be moved out of alloc_linger_request() in the next commit, which means that ceph_osdc_watch() will need to call ceph_osdc_alloc_messages() twice. Add a helper for that. Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
81c65213d7
commit
39e58c3425
|
@ -4492,6 +4492,23 @@ alloc_linger_request(struct ceph_osd_linger_request *lreq)
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct ceph_osd_request *
|
||||||
|
alloc_watch_request(struct ceph_osd_linger_request *lreq, u8 watch_opcode)
|
||||||
|
{
|
||||||
|
struct ceph_osd_request *req;
|
||||||
|
|
||||||
|
req = alloc_linger_request(lreq);
|
||||||
|
if (!req)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pass 0 for cookie because we don't know it yet, it will be
|
||||||
|
* filled in by linger_submit().
|
||||||
|
*/
|
||||||
|
osd_req_op_watch_init(req, 0, 0, watch_opcode);
|
||||||
|
return req;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns a handle, caller owns a ref.
|
* Returns a handle, caller owns a ref.
|
||||||
*/
|
*/
|
||||||
|
@ -4521,25 +4538,18 @@ ceph_osdc_watch(struct ceph_osd_client *osdc,
|
||||||
lreq->t.flags = CEPH_OSD_FLAG_WRITE;
|
lreq->t.flags = CEPH_OSD_FLAG_WRITE;
|
||||||
ktime_get_real_ts64(&lreq->mtime);
|
ktime_get_real_ts64(&lreq->mtime);
|
||||||
|
|
||||||
lreq->reg_req = alloc_linger_request(lreq);
|
lreq->reg_req = alloc_watch_request(lreq, CEPH_OSD_WATCH_OP_WATCH);
|
||||||
if (!lreq->reg_req) {
|
if (!lreq->reg_req) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_put_lreq;
|
goto err_put_lreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
lreq->ping_req = alloc_linger_request(lreq);
|
lreq->ping_req = alloc_watch_request(lreq, CEPH_OSD_WATCH_OP_PING);
|
||||||
if (!lreq->ping_req) {
|
if (!lreq->ping_req) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_put_lreq;
|
goto err_put_lreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Pass 0 for cookie because we don't know it yet, it will be
|
|
||||||
* filled in by linger_submit().
|
|
||||||
*/
|
|
||||||
osd_req_op_watch_init(lreq->reg_req, 0, 0, CEPH_OSD_WATCH_OP_WATCH);
|
|
||||||
osd_req_op_watch_init(lreq->ping_req, 0, 0, CEPH_OSD_WATCH_OP_PING);
|
|
||||||
|
|
||||||
linger_submit(lreq);
|
linger_submit(lreq);
|
||||||
ret = linger_reg_commit_wait(lreq);
|
ret = linger_reg_commit_wait(lreq);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
Loading…
Reference in New Issue