Commit cf81b60e authored by Alex Elder's avatar Alex Elder Committed by Sage Weil

rbd: send notify ack asynchronously

When we receive notification of a change to an rbd image's header
object we need to refresh our information about the image (its
size and snapshot context).  Once we have refreshed our rbd image
we need to acknowledge the notification.

This acknowledgement was previously done synchronously, but there's
really no need to wait for it to complete.

Change it so the caller doesn't wait for the notify acknowledgement
request to complete.  And change the name to reflect it's no longer
synchronous.

This resolves:
    http://tracker.newdream.net/issues/3877Signed-off-by: default avatarAlex Elder <elder@inktank.com>
Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
parent 5ae9db81
...@@ -1785,7 +1785,7 @@ static int rbd_img_request_submit(struct rbd_img_request *img_request) ...@@ -1785,7 +1785,7 @@ static int rbd_img_request_submit(struct rbd_img_request *img_request)
return 0; return 0;
} }
static int rbd_obj_notify_ack_sync(struct rbd_device *rbd_dev, static int rbd_obj_notify_ack(struct rbd_device *rbd_dev,
u64 ver, u64 notify_id) u64 ver, u64 notify_id)
{ {
struct rbd_obj_request *obj_request; struct rbd_obj_request *obj_request;
...@@ -1809,11 +1809,11 @@ static int rbd_obj_notify_ack_sync(struct rbd_device *rbd_dev, ...@@ -1809,11 +1809,11 @@ static int rbd_obj_notify_ack_sync(struct rbd_device *rbd_dev,
goto out; goto out;
osdc = &rbd_dev->rbd_client->client->osdc; osdc = &rbd_dev->rbd_client->client->osdc;
obj_request->callback = rbd_obj_request_put;
ret = rbd_obj_request_submit(osdc, obj_request); ret = rbd_obj_request_submit(osdc, obj_request);
if (!ret)
ret = rbd_obj_request_wait(obj_request);
out: out:
rbd_obj_request_put(obj_request); if (ret)
rbd_obj_request_put(obj_request);
return ret; return ret;
} }
...@@ -1835,7 +1835,7 @@ static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data) ...@@ -1835,7 +1835,7 @@ static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data)
rbd_warn(rbd_dev, "got notification but failed to " rbd_warn(rbd_dev, "got notification but failed to "
" update snaps: %d\n", rc); " update snaps: %d\n", rc);
rbd_obj_notify_ack_sync(rbd_dev, hver, notify_id); rbd_obj_notify_ack(rbd_dev, hver, notify_id);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment