rbd: implement layered reads
authorAlex Elder <elder@inktank.com>
Thu, 24 Jan 2013 22:13:36 +0000 (16:13 -0600)
committerSage Weil <sage@inktank.com>
Thu, 2 May 2013 04:18:48 +0000 (21:18 -0700)
commit8b3e1a56982d0eafff0afb0ff9e87c8b944a9bdc
tree5c3af92d78d35f27274533eec7d8353c124266ba
parent2f82ee54d95c9430838e4580f3bcc196ad36e4f2
rbd: implement layered reads

Implement layered read requests for format 2 rbd images.

If an rbd image is a clone of a snapshot, the snapshot will be the
clone's "parent" image.  When an object read request on a clone
comes back with ENOENT it indicates that the clone is not yet
populated with that portion of the image's data, and the parent
image should be consulted to satisfy the read.

When this occurs, a new image request is created, directed to the
parent image.  The offset and length of the image are the same as
the image-relative offset and length of the object request that
produced ENOENT.  Data from the parent image therefore satisfies the
object read request for the original image request.

While this code works, it will not be active until we enable the
layering feature (by adding RBD_FEATURE_LAYERING to the value of
RBD_FEATURES_SUPPORTED).

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
drivers/block/rbd.c