aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-01-17 13:18:46 -0500
committerSage Weil <sage@inktank.com>2013-02-13 21:29:09 -0500
commitcf81b60e4bbd4a1281fe2640f9c0c40fe3a85fdf (patch)
tree093a86f3c3809c4013f8f9d4b8da83acc09cfab2 /drivers/block
parent5ae9db81b45c2d95554c665043afffd5e9a7d5ac (diff)
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/3877 Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/rbd.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 7a6694d08874..76917cc3e5a1 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1785,7 +1785,7 @@ static int rbd_img_request_submit(struct rbd_img_request *img_request)
1785 return 0; 1785 return 0;
1786} 1786}
1787 1787
1788static int rbd_obj_notify_ack_sync(struct rbd_device *rbd_dev, 1788static int rbd_obj_notify_ack(struct rbd_device *rbd_dev,
1789 u64 ver, u64 notify_id) 1789 u64 ver, u64 notify_id)
1790{ 1790{
1791 struct rbd_obj_request *obj_request; 1791 struct rbd_obj_request *obj_request;
@@ -1809,11 +1809,11 @@ static int rbd_obj_notify_ack_sync(struct rbd_device *rbd_dev,
1809 goto out; 1809 goto out;
1810 1810
1811 osdc = &rbd_dev->rbd_client->client->osdc; 1811 osdc = &rbd_dev->rbd_client->client->osdc;
1812 obj_request->callback = rbd_obj_request_put;
1812 ret = rbd_obj_request_submit(osdc, obj_request); 1813 ret = rbd_obj_request_submit(osdc, obj_request);
1813 if (!ret)
1814 ret = rbd_obj_request_wait(obj_request);
1815out: 1814out:
1816 rbd_obj_request_put(obj_request); 1815 if (ret)
1816 rbd_obj_request_put(obj_request);
1817 1817
1818 return ret; 1818 return ret;
1819} 1819}
@@ -1835,7 +1835,7 @@ static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data)
1835 rbd_warn(rbd_dev, "got notification but failed to " 1835 rbd_warn(rbd_dev, "got notification but failed to "
1836 " update snaps: %d\n", rc); 1836 " update snaps: %d\n", rc);
1837 1837
1838 rbd_obj_notify_ack_sync(rbd_dev, hver, notify_id); 1838 rbd_obj_notify_ack(rbd_dev, hver, notify_id);
1839} 1839}
1840 1840
1841/* 1841/*