Vivek Goyal wrote: ... > @@ -2201,13 +2362,44 @@ void elv_ioq_completed_request(struct request_queue *q, struct request *rq) > * mean seek distance, give them a chance to run instead > * of idling. > */ > - if (elv_ioq_slice_used(ioq) || elv_ioq_class_idle(ioq)) > + if (elv_ioq_slice_used(ioq) || elv_ioq_class_idle(ioq)) { > + /* > + * This is the last empty queue in the group and it > + * has consumed its slice. If we expire it right away > + * group might loose its share. Wait for an extra > + * group_idle period for a request before queue > + * expires. > + */ > + if (elv_iog_should_idle(ioq)) { > + elv_iog_arm_slice_timer(q, iog, 1); > + goto done; > + } > + Hi Vivek, I think we shouldn't arm idle timer on iog again, if it's already on. Signed-off-by: Gui Jianfeng <guijianfeng@xxxxxxxxxxxxxx> --- block/elevator-fq.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/block/elevator-fq.c b/block/elevator-fq.c index a4161c2..04f646f 100644 --- a/block/elevator-fq.c +++ b/block/elevator-fq.c @@ -3116,7 +3116,8 @@ void elv_ioq_completed_request(struct request_queue *q, struct request *rq) * group_idle period for a request before queue * expires. */ - if (elv_iog_should_idle(ioq)) { + if (elv_iog_should_idle(ioq) && + !elv_iog_wait_busy(iog)) { elv_iog_arm_slice_timer(q, iog, 1); goto done; } -- 1.5.4.rc3 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel