rbd_req_sync_notify_ack(rbd_dev, hver, notify_id);
}
-/*
- * Request sync osd watch/unwatch. The value of "start" determines
- * whether a watch request is being initiated or torn down.
- */
-static int rbd_req_sync_watch(struct rbd_device *rbd_dev, int start)
-{
- struct ceph_osd_req_op *op;
- int ret = 0;
-
- rbd_assert(start ^ !!rbd_dev->watch_event);
- rbd_assert(start ^ !!rbd_dev->watch_request);
-
- if (start) {
- struct ceph_osd_client *osdc;
-
- osdc = &rbd_dev->rbd_client->client->osdc;
- ret = ceph_osdc_create_event(osdc, rbd_watch_cb, 0, rbd_dev,
- &rbd_dev->watch_event);
- if (ret < 0)
- return ret;
- }
-
- op = rbd_osd_req_op_create(CEPH_OSD_OP_WATCH,
- rbd_dev->watch_event->cookie,
- rbd_dev->header.obj_version, start);
- if (op)
- ret = rbd_req_sync_op(rbd_dev,
- CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_ONDISK,
- op, rbd_dev->header_name,
- 0, 0, NULL, NULL);
-
- /* Cancel the event if we're tearing down, or on error */
-
- if (!start || !op || ret < 0) {
- ceph_osdc_cancel_event(rbd_dev->watch_event);
- rbd_dev->watch_event = NULL;
- }
- rbd_osd_req_op_destroy(op);
-
- return ret;
-}
/*
* Synchronous osd object method call
if (ret)
goto err_out_bus;
- (void) rbd_req_sync_watch; /* avoid a warning */
ret = rbd_dev_header_watch_sync(rbd_dev, 1);
if (ret)
goto err_out_bus;