diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 7c66173e2d83c84b2f7909c4dea703d38ee8297f..c8eb9cb77d361e3757da02955c81f0112cc7f586 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -2254,13 +2254,17 @@ static int rbd_img_request_fill(struct rbd_img_request *img_request,
 					obj_request->pages, length,
 					offset & ~PAGE_MASK, false, false);
 
+		/*
+		 * set obj_request->img_request before formatting
+		 * the osd_request so that it gets the right snapc
+		 */
+		rbd_img_obj_request_add(img_request, obj_request);
 		if (write_request)
 			rbd_osd_req_format_write(obj_request);
 		else
 			rbd_osd_req_format_read(obj_request);
 
 		obj_request->img_offset = img_offset;
-		rbd_img_obj_request_add(img_request, obj_request);
 
 		img_offset += length;
 		resid -= length;