summaryrefslogtreecommitdiff
path: root/drivers/md/dm-table.c
diff options
context:
space:
mode:
authorVivek Goyal <vgoyal@redhat.com>2010-12-01 18:34:46 (GMT)
committerJens Axboe <jaxboe@fusionio.com>2010-12-01 18:34:46 (GMT)
commitd1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347 (patch)
treed34fabaf556ec4471e076b4794fa1de8515956f0 /drivers/md/dm-table.c
parent5478755616ae2ef1ce144dded589b62b2a50d575 (diff)
downloadlinux-d1ae8ffdfaa16b2ab2e9346e81cf0ab6eaaae347.tar.xz
blk-throttle: Trim/adjust slice_end once a bio has been dispatched
o During some testing I did following and noticed throttling stops working. - Put a very low limit on a cgroup, say 1 byte per second. - Start some reads, this will set slice_end to a very high value. - Change the limit to higher value say 1MB/s - Now IO unthrottles and finishes as expected. - Try to do the read again but IO is not limited to 1MB/s as expected. o What is happening. - Initially low value of limit sets slice_end to a very high value. - During updation of limit, slice_end is not being truncated. - Very high value of slice_end leads to keeping the existing slice valid for a very long time and new slice does not start. - tg_may_dispatch() is called in blk_throtle_bio(), and trim_slice() is not called in this path. So slice_start is some old value and practically we are able to do huge amount of IO. o There are many ways it can be fixed. I have fixed it by trying to adjust/cleanup slice_end in trim_slice(). Generally we extend slices if bio is big and can't be dispatched in one slice. After dispatch of bio, readjust the slice_end to make sure we don't end up with huge values. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'drivers/md/dm-table.c')
0 files changed, 0 insertions, 0 deletions