Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp3371384ybl; Mon, 20 Jan 2020 22:51:30 -0800 (PST) X-Google-Smtp-Source: APXvYqwI+GaVWeeruNc3fv3iEJtBlDyW5WmCWHRT7ZAF2buV7koOkEYB08uDLmBaBuTEY9lK8QQ7 X-Received: by 2002:aca:b808:: with SMTP id i8mr1878904oif.66.1579589490151; Mon, 20 Jan 2020 22:51:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579589490; cv=none; d=google.com; s=arc-20160816; b=J48MYgq3mNY5qjf4+qCrpieZP6XfoLG55fXy4NMkSUPnFbj5Uk30/RHmbum/kvgoCk ctUilqkXBJl2XtIoJDUTwwA/VJS7Tl3D9TxEzt5+fIm5e/Y3llbaNHchYLzIwotcVxhz XWK5RMGdD8zCva61PIqLM+sbiuxDBVxFmIkDYkLrSPhED4pabWzhRmLwutb3v8A/2+dT UGvThLoSel1qNmEetPWzSjkEzqGQGTeRda97t+1NECkRK/5x2nItFcV13B4lYx1X01EW g6/Kw1bvEqpmCPl1MhfQW+INqXKJnfHvaLFumpMLaSLz6MOx4qIAw8vevbWzjkaZbtVe j+6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=/efG+wZvJrtSxnxnGwW4CzhstFTaB/dujZaXaaP+Ntw=; b=dzcKbQZO4b/BayfTn7O3cLKcgoa6ylkLXiAtw3IQdtrjaoUy5jYV82FYMs2I1vZkR5 QRExSO4Ho5xLsB14tijWuuyPyX2l3shV+chCvVBJ25vLAesmc0P1zJvPsY+t875mKWAQ xi8KvG1obuXls/AYXVW0rwdLqGZmP5CLEy6jzLj5JsIpCRKnAIfZ4Ng0nQAMFSaqsP3E oS0CNGEAHZkZJCLaES9jHvmu1pQI5ChOEUJdB08fTogqA29YKe1SJ1sjBVSCQ6zv5wpA tWZsUce5EHNZKps8DzRZI4fzlGrbaVWYz6xmTucsZ6KymRNVeEUM2UqMCbW9YCSsWQOo KwOA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y18si19728779oix.27.2020.01.20.22.51.18; Mon, 20 Jan 2020 22:51:30 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728826AbgAUGtZ (ORCPT + 99 others); Tue, 21 Jan 2020 01:49:25 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:45084 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725789AbgAUGtZ (ORCPT ); Tue, 21 Jan 2020 01:49:25 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id B3E0436CD764D1ECFCC3; Tue, 21 Jan 2020 14:49:23 +0800 (CST) Received: from architecture4.huawei.com (10.160.196.180) by smtp.huawei.com (10.3.19.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 21 Jan 2020 14:49:15 +0800 From: Gao Xiang To: Chao Yu , CC: , Miao Xie , Gao Xiang Subject: [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() Date: Tue, 21 Jan 2020 14:48:19 +0800 Message-ID: <20200121064819.139469-1-gaoxiang25@huawei.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200121064747.138987-1-gaoxiang25@huawei.com> References: <20200121064747.138987-1-gaoxiang25@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.160.196.180] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A label and extra variables will be eliminated, which is more cleaner. Signed-off-by: Gao Xiang --- rebased on v2 1/2. fs/erofs/zdata.c | 95 ++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 55 deletions(-) diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index f63a893fe886..80e47f07d946 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -1148,7 +1148,7 @@ static void move_to_bypass_jobqueue(struct z_erofs_pcluster *pcl, qtail[JQ_BYPASS] = &pcl->next; } -static bool z_erofs_submit_queue(struct super_block *sb, +static void z_erofs_submit_queue(struct super_block *sb, z_erofs_next_pcluster_t owned_head, struct list_head *pagepool, struct z_erofs_decompressqueue *fgq, @@ -1157,19 +1157,12 @@ static bool z_erofs_submit_queue(struct super_block *sb, struct erofs_sb_info *const sbi = EROFS_SB(sb); z_erofs_next_pcluster_t qtail[NR_JOBQUEUES]; struct z_erofs_decompressqueue *q[NR_JOBQUEUES]; - struct bio *bio; void *bi_private; /* since bio will be NULL, no need to initialize last_index */ pgoff_t uninitialized_var(last_index); - bool force_submit = false; - unsigned int nr_bios; + unsigned int nr_bios = 0; + struct bio *bio = NULL; - if (owned_head == Z_EROFS_PCLUSTER_TAIL) - return false; - - force_submit = false; - bio = NULL; - nr_bios = 0; bi_private = jobqueueset_init(sb, q, fgq, force_fg); qtail[JQ_BYPASS] = &q[JQ_BYPASS]->head; qtail[JQ_SUBMIT] = &q[JQ_SUBMIT]->head; @@ -1179,11 +1172,9 @@ static bool z_erofs_submit_queue(struct super_block *sb, do { struct z_erofs_pcluster *pcl; - unsigned int clusterpages; - pgoff_t first_index; - struct page *page; - unsigned int i = 0, bypass = 0; - int err; + pgoff_t cur, end; + unsigned int i = 0; + bool bypass = true; /* no possible 'owned_head' equals the following */ DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); @@ -1191,55 +1182,50 @@ static bool z_erofs_submit_queue(struct super_block *sb, pcl = container_of(owned_head, struct z_erofs_pcluster, next); - clusterpages = BIT(pcl->clusterbits); + cur = pcl->obj.index; + end = cur + BIT(pcl->clusterbits); /* close the main owned chain at first */ owned_head = cmpxchg(&pcl->next, Z_EROFS_PCLUSTER_TAIL, Z_EROFS_PCLUSTER_TAIL_CLOSED); - first_index = pcl->obj.index; - force_submit |= (first_index != last_index + 1); + do { + struct page *page; + int err; -repeat: - page = pickup_page_for_submission(pcl, i, pagepool, - MNGD_MAPPING(sbi), - GFP_NOFS); - if (!page) { - force_submit = true; - ++bypass; - goto skippage; - } + page = pickup_page_for_submission(pcl, i++, pagepool, + MNGD_MAPPING(sbi), + GFP_NOFS); + if (!page) + continue; - if (bio && force_submit) { + if (bio && cur != last_index + 1) { submit_bio_retry: - submit_bio(bio); - bio = NULL; - } - - if (!bio) { - bio = bio_alloc(GFP_NOIO, BIO_MAX_PAGES); + submit_bio(bio); + bio = NULL; + } - bio->bi_end_io = z_erofs_decompressqueue_endio; - bio_set_dev(bio, sb->s_bdev); - bio->bi_iter.bi_sector = (sector_t)(first_index + i) << - LOG_SECTORS_PER_BLOCK; - bio->bi_private = bi_private; - bio->bi_opf = REQ_OP_READ; + if (!bio) { + bio = bio_alloc(GFP_NOIO, BIO_MAX_PAGES); - ++nr_bios; - } + bio->bi_end_io = z_erofs_decompressqueue_endio; + bio_set_dev(bio, sb->s_bdev); + bio->bi_iter.bi_sector = (sector_t)cur << + LOG_SECTORS_PER_BLOCK; + bio->bi_private = bi_private; + bio->bi_opf = REQ_OP_READ; + ++nr_bios; + } - err = bio_add_page(bio, page, PAGE_SIZE, 0); - if (err < PAGE_SIZE) - goto submit_bio_retry; + err = bio_add_page(bio, page, PAGE_SIZE, 0); + if (err < PAGE_SIZE) + goto submit_bio_retry; - force_submit = false; - last_index = first_index + i; -skippage: - if (++i < clusterpages) - goto repeat; + last_index = cur; + bypass = false; + } while (++cur < end); - if (bypass < clusterpages) + if (!bypass) qtail[JQ_SUBMIT] = &pcl->next; else move_to_bypass_jobqueue(pcl, qtail, owned_head); @@ -1254,10 +1240,9 @@ static bool z_erofs_submit_queue(struct super_block *sb, */ if (!*force_fg && !nr_bios) { kvfree(q[JQ_SUBMIT]); - return true; + return; } z_erofs_decompress_kickoff(q[JQ_SUBMIT], *force_fg, nr_bios); - return true; } static void z_erofs_runqueue(struct super_block *sb, @@ -1266,9 +1251,9 @@ static void z_erofs_runqueue(struct super_block *sb, { struct z_erofs_decompressqueue io[NR_JOBQUEUES]; - if (!z_erofs_submit_queue(sb, clt->owned_head, - pagepool, io, &force_fg)) + if (clt->owned_head == Z_EROFS_PCLUSTER_TAIL) return; + z_erofs_submit_queue(sb, clt->owned_head, pagepool, io, &force_fg); /* handle bypass queue (no i/o pclusters) immediately */ z_erofs_decompress_queue(&io[JQ_BYPASS], pagepool); -- 2.17.1