]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/block/rbd.c
rbd: set blk_queue request sizes to object size
[linux-beck.git] / drivers / block / rbd.c
index 7392d7af7eab684cda3ffd6f52caa2c3b15cdebe..15f65b5f3fc7156c50300a6ab4d8efbe8a054e0e 100644 (file)
@@ -629,6 +629,14 @@ static int rbd_get_num_segments(struct rbd_image_header *header,
        return end_seg - start_seg + 1;
 }
 
+/*
+ * returns the size of an object in the image
+ */
+static u64 rbd_obj_bytes(struct rbd_image_header *header)
+{
+       return 1 << header->obj_order;
+}
+
 /*
  * bio helpers
  */
@@ -1765,6 +1773,13 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
        q = blk_init_queue(rbd_rq_fn, &rbd_dev->lock);
        if (!q)
                goto out_disk;
+
+       /* set io sizes to object size */
+       blk_queue_max_hw_sectors(q, rbd_obj_bytes(&rbd_dev->header) / 512ULL);
+       blk_queue_max_segment_size(q, rbd_obj_bytes(&rbd_dev->header));
+       blk_queue_io_min(q, rbd_obj_bytes(&rbd_dev->header));
+       blk_queue_io_opt(q, rbd_obj_bytes(&rbd_dev->header));
+
        blk_queue_merge_bvec(q, rbd_merge_bvec);
        disk->queue = q;