From patchwork Wed Aug 17 05:20:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daeho Jeong X-Patchwork-Id: 9285121 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 378EA60839 for ; Wed, 17 Aug 2016 05:17:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 299452894B for ; Wed, 17 Aug 2016 05:17:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1E59D2898F; Wed, 17 Aug 2016 05:17:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8CD992894B for ; Wed, 17 Aug 2016 05:17:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753680AbcHQFRu (ORCPT ); Wed, 17 Aug 2016 01:17:50 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:47631 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753629AbcHQFRk (ORCPT ); Wed, 17 Aug 2016 01:17:40 -0400 Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OC100N5VG1CI2E0@mailout2.samsung.com>; Wed, 17 Aug 2016 14:17:36 +0900 (KST) Received: from epcpsbgm1new.samsung.com ( [203.254.230.41]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 26.8C.31386.073F3B75; Wed, 17 Aug 2016 14:17:36 +0900 (KST) X-AuditID: cbfee68d-f79286d000007a9a-0f-57b3f3703e06 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1new.samsung.com (EPCPMTA) with SMTP id 1E.15.05218.073F3B75; Wed, 17 Aug 2016 14:17:36 +0900 (KST) Received: from localhost.localdomain ([10.253.100.138]) by mmp2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OC100EOZG175J80@mmp2.samsung.com>; Wed, 17 Aug 2016 14:17:36 +0900 (KST) From: Daeho Jeong To: axboe@kernel.dk, tytso@mit.edu, adilger.kernel@dilger.ca, jack@suse.com, linux-block@vger.kernel.org, linux-mm@kvack.org, linux-ext4@vger.kernel.org Cc: Daeho Jeong Subject: [RFC 2/3] cfq: add cfq_find_async_wb_req Date: Wed, 17 Aug 2016 14:20:44 +0900 Message-id: <1471411245-5186-3-git-send-email-daeho.jeong@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1471411245-5186-1-git-send-email-daeho.jeong@samsung.com> References: <1471411245-5186-1-git-send-email-daeho.jeong@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOLMWRmVeSWpSXmKPExsVy+t8zTd2Cz5vDDVoeylp8/dLBYrH6bj+b xZ5P69gsni9fzGix95a2xcx5d9gs7q35z2rR2vOT3YHDo2Vzucfls6Uemz5NYvdoOnOU2aNv yypGj/VbrrJ4fN4kF8AexWWTkpqTWZZapG+XwJVxoec5S8FDqYpFy/awNjC+EO1i5OSQEDCR aNt4mRXCFpO4cG89WxcjF4eQwEpGibNH17HCFF28dYgRIjGLUaLnwCRmCOcno8SJWwfAqtgE tCWmL5/FDpIQAalq27+SHSTBLKApsflHEwuILSxgKLF94UZmEJtFQFXizuqPTF2MHBy8Am4S p5sVQEwJAQWJOZNsQCo4Bdwlfs25yQhiCwFVfH8wDWyvhMA2dom2DedZIcYISHybfIgFoldW YtMBZoijJSUOrrjBMoFReAEjwypG0dSC5ILipPQiQ73ixNzi0rx0veT83E2MkPDv3cF4+4D1 IUYBDkYlHt4Gi83hQqyJZcWVuYcYTYE2TGSWEk3OB0ZZXkm8obGZkYWpiamxkbmlmZI4r6LU z2AhgfTEktTs1NSC1KL4otKc1OJDjEwcnFINjMU6S6OPHuHsiKk7saBT+O25LqNeIZOnN2o1 F/yU/1Bdnhn5K9/r5aqnK3l8pTQ44w9tu+KYEtpQtKJ4Xm0CO2dnZ1rpz0/O2g2n89Zy9q04 EuHan8ulI/gzjp9r46mIuinRJheXrbQ2ki7esPntlDc6/guZvibWGC63Cd12cZdaEMsM9tdW SizFGYmGWsxFxYkA/9LipHoCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrCIsWRmVeSWpSXmKPExsVy+t9jQd2Cz5vDDRYvlbT4+qWDxWL13X42 iz2f1rFZPF++mNFi7y1ti5nz7rBZ3Fvzn9WitecnuwOHR8vmco/LZ0s9Nn2axO7RdOYos0ff llWMHuu3XGXx+LxJLoA9qoHRJiM1MSW1SCE1Lzk/JTMv3VbJOzjeOd7UzMBQ19DSwlxJIS8x N9VWycUnQNctMwfoJiWFssScUqBQQGJxsZK+HaYJoSFuuhYwjRG6viFBcD1GBmggYR1jxoWe 5ywFD6UqFi3bw9rA+EK0i5GTQ0LAROLirUOMELaYxIV769m6GLk4hARmMUr0HJjEDOH8ZJQ4 cesAK0gVm4C2xPTls9hBEiIgVW37V7KDJJgFNCU2/2hiAbGFBQwlti/cyAxiswioStxZ/ZGp i5GDg1fATeJ0swKIKSGgIDFnkg1IBaeAu8SvOTfBjhACqvj+YBrzBEbeBYwMqxglUguSC4qT 0nMN81LL9YoTc4tL89L1kvNzNzGCY+yZ1A7Gg7vcDzEKcDAq8fCeKN8cLsSaWFZcmXuIUYKD WUmEV+wdUIg3JbGyKrUoP76oNCe1+BCjKdBZE5mlRJPzgfGfVxJvaGxiZmRpZGZsYm5srCTO +/j/ujAhgfTEktTs1NSC1CKYPiYOTqkGRvEZlxe/ceq8/f5w54WymT7xIm9u2nR+n+ZxIFli yVnPnS07J1y8WmhtP/tkncD5e7yJtmUPtVPDU/0UbfP3slSxZFxawfc1y2iF9pd0vdU9OlaB hXvuxi+dZ7N4brLclLnt92/a3u1Iv6mzc/tq7Qlr7t9e+qHdOs0n2G5x7IKO5TGGVwyPuymx FGckGmoxFxUnAgCSV3OcxwIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Implemented a function to find asynchronous writeback I/O with a specified sector number and remove the found I/O from the queue and return that to the caller. Signed-off-by: Daeho Jeong --- block/cfq-iosched.c | 29 +++++++++++++++++++++++++++++ block/elevator.c | 24 ++++++++++++++++++++++++ include/linux/elevator.h | 3 +++ 3 files changed, 56 insertions(+) diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 4a34978..69355e2 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -2524,6 +2524,32 @@ static void cfq_remove_request(struct request *rq) } } +#ifdef CONFIG_BOOST_URGENT_ASYNC_WB +static struct request * +cfq_find_async_wb_req(struct request_queue *q, sector_t sector) +{ + struct cfq_data *cfqd = q->elevator->elevator_data; + struct cfq_queue *cfqq; + struct request *found_req = NULL; + int i; + + for (i = 0; i < IOPRIO_BE_NR; i++) { + cfqq = cfqd->root_group->async_cfqq[1][i]; + if (cfqq) { + if (cfqq->queued[0]) + found_req = elv_rb_find_incl(&cfqq->sort_list, + sector); + if (found_req) { + cfq_remove_request(found_req); + return found_req; + } + } + } + + return NULL; +} +#endif + static int cfq_merge(struct request_queue *q, struct request **req, struct bio *bio) { @@ -4735,6 +4761,9 @@ static struct elevator_type iosched_cfq = { .elevator_add_req_fn = cfq_insert_request, .elevator_activate_req_fn = cfq_activate_request, .elevator_deactivate_req_fn = cfq_deactivate_request, +#ifdef CONFIG_BOOST_URGENT_ASYNC_WB + .elevator_find_async_wb_req_fn = cfq_find_async_wb_req, +#endif .elevator_completed_req_fn = cfq_completed_request, .elevator_former_req_fn = elv_rb_former_request, .elevator_latter_req_fn = elv_rb_latter_request, diff --git a/block/elevator.c b/block/elevator.c index e4081ce..d34267a 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -343,6 +343,30 @@ struct request *elv_rb_find(struct rb_root *root, sector_t sector) } EXPORT_SYMBOL(elv_rb_find); +#ifdef CONFIG_BOOST_URGENT_ASYNC_WB +struct request *elv_rb_find_incl(struct rb_root *root, sector_t sector) +{ + struct rb_node *n = root->rb_node; + struct request *rq; + + while (n) { + rq = rb_entry(n, struct request, rb_node); + + if (sector < blk_rq_pos(rq)) + n = n->rb_left; + else if (sector > blk_rq_pos(rq)) { + if (sector < blk_rq_pos(rq) + blk_rq_sectors(rq)) + return rq; + n = n->rb_right; + } else + return rq; + } + + return NULL; +} +EXPORT_SYMBOL(elv_rb_find_incl); +#endif + /* * Insert rq into dispatch queue of q. Queue lock must be held on * entry. rq is sort instead into the dispatch queue. To be used by diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 08ce155..efc202a 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h @@ -183,6 +183,9 @@ extern struct request *elv_rb_latter_request(struct request_queue *, struct requ extern void elv_rb_add(struct rb_root *, struct request *); extern void elv_rb_del(struct rb_root *, struct request *); extern struct request *elv_rb_find(struct rb_root *, sector_t); +#ifdef CONFIG_BOOST_URGENT_ASYNC_WB +extern struct request *elv_rb_find_incl(struct rb_root *, sector_t); +#endif /* * Return values from elevator merger