From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com> To: Jens Axboe <jens.axboe@oracle.com>, Alasdair G Kergon <agk@redhat.com>, "Martin K. Petersen" <martin.petersen@oracle.com>, Mike Snitzer <snitzer@redhat.com> Cc: David Strand <dpstrand@gmail.com>, device-mapper development <dm-devel@redhat.com>, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] block: blk_set_default_limits sets 0 to max_sectors Date: Sat, 19 Sep 2009 00:18:50 +0900 [thread overview] Message-ID: <4AB3A4DA.90309@ce.jp.nec.com> (raw) max_sectors and max_hw_sectors of dm device are set to smaller values than those of underlying devices. E.g: # cat /sys/block/sdj/queue/max_sectors_kb 512 # cat /sys/block/sdj/queue/max_hw_sectors_kb 32767 # echo "0 10 linear /dev/sdj 0" | dmsetup create test # cat /sys/block/dm-0/queue/max_sectors_kb 127 # cat /sys/block/dm-0/queue/max_hw_sectors_kb 127 This prevents the I/O size of struct request from becoming large, and causes undesired request fragmentation in request-based dm. This is caused by the queue_limits stacking. In dm_calculate_queue_limits(), the block-layer's safe default value (SAFE_MAX_SECTORS, 255) is included in the merging process of target's queue_limits. So underlying queue_limits is not propagated correctly. Initialize default values of all max_sectors to '0' in blk_set_default_limits() so that the values propagate properly from underlying devices. Check this thread for further background: https://www.redhat.com/archives/dm-devel/2009-September/msg00176.html Signed-off-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Reported-by: David Strand <dpstrand@gmail.com> Cc: Mike Snitzer <snitzer@redhat.com> Cc: Alasdair G Kergon <agk@redhat.com> Cc: Martin K. Petersen <martin.petersen@oracle.com> Cc: Jens Axboe <jens.axboe@oracle.com> --- block/blk-settings.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-2.6.31.work/block/blk-settings.c =================================================================== --- linux-2.6.31.work.orig/block/blk-settings.c +++ linux-2.6.31.work/block/blk-settings.c @@ -111,7 +111,7 @@ void blk_set_default_limits(struct queue lim->max_hw_segments = MAX_HW_SEGMENTS; lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK; lim->max_segment_size = MAX_SEGMENT_SIZE; - lim->max_sectors = lim->max_hw_sectors = SAFE_MAX_SECTORS; + lim->max_sectors = lim->max_hw_sectors = 0; lim->logical_block_size = lim->physical_block_size = lim->io_min = 512; lim->bounce_pfn = (unsigned long)(BLK_BOUNCE_ANY >> PAGE_SHIFT); lim->alignment_offset = 0; @@ -164,6 +164,7 @@ void blk_queue_make_request(struct reque q->unplug_timer.data = (unsigned long)q; blk_set_default_limits(&q->limits); + blk_queue_max_sectors(q, SAFE_MAX_SECTORS); /* * If the caller didn't supply a lock, fall back to our embedded
WARNING: multiple messages have this Message-ID (diff)
From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com> To: Jens Axboe <jens.axboe@oracle.com>, Alasdair G Kergon <agk@redhat.com>, "Martin K. Petersen" <martin.petersen@oracle.com>, Mike Snitzer <snitzer@redhat.com> Cc: device-mapper development <dm-devel@redhat.com>, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] block: blk_set_default_limits sets 0 to max_sectors Date: Sat, 19 Sep 2009 00:18:50 +0900 [thread overview] Message-ID: <4AB3A4DA.90309@ce.jp.nec.com> (raw) max_sectors and max_hw_sectors of dm device are set to smaller values than those of underlying devices. E.g: # cat /sys/block/sdj/queue/max_sectors_kb 512 # cat /sys/block/sdj/queue/max_hw_sectors_kb 32767 # echo "0 10 linear /dev/sdj 0" | dmsetup create test # cat /sys/block/dm-0/queue/max_sectors_kb 127 # cat /sys/block/dm-0/queue/max_hw_sectors_kb 127 This prevents the I/O size of struct request from becoming large, and causes undesired request fragmentation in request-based dm. This is caused by the queue_limits stacking. In dm_calculate_queue_limits(), the block-layer's safe default value (SAFE_MAX_SECTORS, 255) is included in the merging process of target's queue_limits. So underlying queue_limits is not propagated correctly. Initialize default values of all max_sectors to '0' in blk_set_default_limits() so that the values propagate properly from underlying devices. Check this thread for further background: https://www.redhat.com/archives/dm-devel/2009-September/msg00176.html Signed-off-by: Kiyoshi Ueda <k-ueda@ct.jp.nec.com> Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Reported-by: David Strand <dpstrand@gmail.com> Cc: Mike Snitzer <snitzer@redhat.com> Cc: Alasdair G Kergon <agk@redhat.com> Cc: Martin K. Petersen <martin.petersen@oracle.com> Cc: Jens Axboe <jens.axboe@oracle.com> --- block/blk-settings.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-2.6.31.work/block/blk-settings.c =================================================================== --- linux-2.6.31.work.orig/block/blk-settings.c +++ linux-2.6.31.work/block/blk-settings.c @@ -111,7 +111,7 @@ void blk_set_default_limits(struct queue lim->max_hw_segments = MAX_HW_SEGMENTS; lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK; lim->max_segment_size = MAX_SEGMENT_SIZE; - lim->max_sectors = lim->max_hw_sectors = SAFE_MAX_SECTORS; + lim->max_sectors = lim->max_hw_sectors = 0; lim->logical_block_size = lim->physical_block_size = lim->io_min = 512; lim->bounce_pfn = (unsigned long)(BLK_BOUNCE_ANY >> PAGE_SHIFT); lim->alignment_offset = 0; @@ -164,6 +164,7 @@ void blk_queue_make_request(struct reque q->unplug_timer.data = (unsigned long)q; blk_set_default_limits(&q->limits); + blk_queue_max_sectors(q, SAFE_MAX_SECTORS); /* * If the caller didn't supply a lock, fall back to our embedded
next reply other threads:[~2009-09-18 15:26 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-09-18 15:18 Jun'ichi Nomura [this message] 2009-09-18 15:18 ` [PATCH 2/2] block: blk_set_default_limits sets 0 to max_sectors Jun'ichi Nomura
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=4AB3A4DA.90309@ce.jp.nec.com \ --to=j-nomura@ce.jp.nec.com \ --cc=agk@redhat.com \ --cc=dm-devel@redhat.com \ --cc=dpstrand@gmail.com \ --cc=jens.axboe@oracle.com \ --cc=linux-kernel@vger.kernel.org \ --cc=martin.petersen@oracle.com \ --cc=snitzer@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.