From 05ecb16e0c37f5e1902a2e2de808f739ed53e4c9 Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Fri, 22 Jul 2011 11:35:23 -0700 Subject: [PATCH] --- yaml --- r: 260348 b: refs/heads/master c: 029bcbd8b076fd19787b8c73e58dd0a6f2c0caf1 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/block/rbd.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 25f2ad348d52..db223541df7e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e9852227431a0ed6ceda064f33e4218757acab6c +refs/heads/master: 029bcbd8b076fd19787b8c73e58dd0a6f2c0caf1 diff --git a/trunk/drivers/block/rbd.c b/trunk/drivers/block/rbd.c index 7392d7af7eab..15f65b5f3fc7 100644 --- a/trunk/drivers/block/rbd.c +++ b/trunk/drivers/block/rbd.c @@ -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;