]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
librbd: call user completion after incrementing perfcounters 1000/head
authorJosh Durgin <josh.durgin@inktank.com>
Fri, 27 Dec 2013 01:38:52 +0000 (17:38 -0800)
committerJosh Durgin <josh.durgin@inktank.com>
Fri, 27 Dec 2013 01:40:34 +0000 (17:40 -0800)
commit4cea7895da7331b84d8c6079851fdc0ff2f4afb1
tree94b3360e01d08763c3e41b527a32d1c8f611ff74
parent0d2d937e2d3a4ede750f10cee1ca7f2a32b61c2c
librbd: call user completion after incrementing perfcounters

The perfcounters (and the ictx) are only valid while the image is
still open.  If the librbd user gets the callback for its last I/O,
then closes the image, the ictx and its perfcounters will be
invalid. If the AioCompletion object is has not run the rest of its
complete() method yet, it will access these now-invalid addresses,
possibly leading to a crash.

The AioCompletion object is independent of the ictx and does not
access it again after incrementing perfcounters, so avoid this race by
calling the user's callback after this step. The AioCompletion object
will be cleaned up by the rest of complete_request(), independent of
the ImageCtx.

Fixes: #5426
Backport: dumpling, emperor
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
src/librbd/AioCompletion.h