rbd: have rbd_obj_method_sync() return transfer count
authorAlex Elder <elder@inktank.com>
Sun, 21 Apr 2013 17:14:45 +0000 (12:14 -0500)
committerSage Weil <sage@inktank.com>
Thu, 2 May 2013 04:19:20 +0000 (21:19 -0700)
commit57385b51c3ffd0fed2dd9d5d8e4ec080c85ecbcd
tree7acd3eb3b373e63e2c71f59357632fc3ba78b677
parent4157976b27287e239d5ae879d2916540fe0b576e
rbd: have rbd_obj_method_sync() return transfer count

Callers of rbd_obj_method_sync() don't know how many bytes of data
got returned by the class method call.  As a result, they have been
assuming enough got returned to decode whatever was expected.

This isn't safe.  We know how many bytes got transferred, so have
rbd_obj_method_sync() return that amount (rather than just 0) if
the call is successful.

Change all callers to use this return value to ensure decoding of
the results is done safely.

On the other hand, most callers of rbd_obj_method_sync() only
indicate success or failure, so all of *their* callers can simply
test for non-zero result.

This resolves:
    http://tracker.ceph.com/issues/4773

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