rbd: fetch object order before using it

rbd_dev_v2_header_onetime() fetches striping information, and
checks whether the image can be read by compariing the stripe unit
to the object size. It determines the object size by shifting
the object order, which is 0 at this point since it has not been
read yet. Move the call to get the image size and object order
before rbd_dev_v2_header_onetime() so it is set before use.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>

authored by Josh Durgin and committed by Sage Weil 1617e40c 3a96d5cd

Changed files
+4 -4
drivers
block
+4 -4
drivers/block/rbd.c
··· 4245 4245 4246 4246 down_write(&rbd_dev->header_rwsem); 4247 4247 4248 + ret = rbd_dev_v2_image_size(rbd_dev); 4249 + if (ret) 4250 + goto out; 4251 + 4248 4252 if (first_time) { 4249 4253 ret = rbd_dev_v2_header_onetime(rbd_dev); 4250 4254 if (ret) ··· 4281 4277 rbd_warn(rbd_dev, "WARNING: kernel layering " 4282 4278 "is EXPERIMENTAL!"); 4283 4279 } 4284 - 4285 - ret = rbd_dev_v2_image_size(rbd_dev); 4286 - if (ret) 4287 - goto out; 4288 4280 4289 4281 if (rbd_dev->spec->snap_id == CEPH_NOSNAP) 4290 4282 if (rbd_dev->mapping.size != rbd_dev->header.image_size)