* [PATCH 1/2] erofs: fold in postsubmit_is_all_bypassed() [not found] <20200120085709.10320-1-hsiangkao.ref@aol.com> @ 2020-01-20 8:57 ` Gao Xiang via Linux-erofs 2020-01-20 8:57 ` [PATCH 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang via Linux-erofs 2020-01-21 6:47 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang 0 siblings, 2 replies; 6+ messages in thread From: Gao Xiang via Linux-erofs @ 2020-01-20 8:57 UTC (permalink / raw) To: Chao Yu; +Cc: Miao Xie, linux-erofs, linux-kernel From: Gao Xiang <gaoxiang25@huawei.com> No need to introduce such separated helper since cache strategy compile configs was changed into runtime options instead in v5.4. No logic changes. Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> --- fs/erofs/zdata.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index 4fedeb4496e4..6ee5153801b2 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -1148,20 +1148,6 @@ static void move_to_bypass_jobqueue(struct z_erofs_pcluster *pcl, qtail[JQ_BYPASS] = &pcl->next; } -static bool postsubmit_is_all_bypassed(struct z_erofs_decompressqueue *q[], - unsigned int nr_bios, bool force_fg) -{ - /* - * although background is preferred, no one is pending for submission. - * don't issue workqueue for decompression but drop it directly instead. - */ - if (force_fg || nr_bios) - return false; - - kvfree(q[JQ_SUBMIT]); - return true; -} - static bool z_erofs_submit_queue(struct super_block *sb, z_erofs_next_pcluster_t owned_head, struct list_head *pagepool, @@ -1262,9 +1248,14 @@ static bool z_erofs_submit_queue(struct super_block *sb, if (bio) submit_bio(bio); - if (postsubmit_is_all_bypassed(q, nr_bios, *force_fg)) + /* + * although background is preferred, no one is pending for submission. + * don't issue workqueue for decompression but drop it directly instead. + */ + if (!force_fg && !nr_bios) { + kvfree(q[JQ_SUBMIT]); return true; - + } z_erofs_decompress_kickoff(q[JQ_SUBMIT], *force_fg, nr_bios); return true; } -- 2.20.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] erofs: clean up z_erofs_submit_queue() 2020-01-20 8:57 ` [PATCH 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang via Linux-erofs @ 2020-01-20 8:57 ` Gao Xiang via Linux-erofs 2020-01-21 6:47 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang 1 sibling, 0 replies; 6+ messages in thread From: Gao Xiang via Linux-erofs @ 2020-01-20 8:57 UTC (permalink / raw) To: Chao Yu; +Cc: Miao Xie, linux-erofs, linux-kernel From: Gao Xiang <gaoxiang25@huawei.com> A label and extra variables will be eliminated, which is more cleaner. Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> --- 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 6ee5153801b2..9a84609b6d1b 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.20.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() 2020-01-20 8:57 ` [PATCH 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang via Linux-erofs 2020-01-20 8:57 ` [PATCH 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang via Linux-erofs @ 2020-01-21 6:47 ` Gao Xiang 2020-01-21 6:48 ` [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang 2020-01-21 8:01 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Chao Yu 1 sibling, 2 replies; 6+ messages in thread From: Gao Xiang @ 2020-01-21 6:47 UTC (permalink / raw) To: Chao Yu, linux-erofs; +Cc: Miao Xie, linux-kernel No need to introduce such separated helper since cache strategy compile configs were changed into runtime options instead in v5.4. No logic changes. Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> --- changes since v1: - fix a wrong condition force_fg -> *forge_fg by mistake. fs/erofs/zdata.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index 4fedeb4496e4..f63a893fe886 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -1148,20 +1148,6 @@ static void move_to_bypass_jobqueue(struct z_erofs_pcluster *pcl, qtail[JQ_BYPASS] = &pcl->next; } -static bool postsubmit_is_all_bypassed(struct z_erofs_decompressqueue *q[], - unsigned int nr_bios, bool force_fg) -{ - /* - * although background is preferred, no one is pending for submission. - * don't issue workqueue for decompression but drop it directly instead. - */ - if (force_fg || nr_bios) - return false; - - kvfree(q[JQ_SUBMIT]); - return true; -} - static bool z_erofs_submit_queue(struct super_block *sb, z_erofs_next_pcluster_t owned_head, struct list_head *pagepool, @@ -1262,9 +1248,14 @@ static bool z_erofs_submit_queue(struct super_block *sb, if (bio) submit_bio(bio); - if (postsubmit_is_all_bypassed(q, nr_bios, *force_fg)) + /* + * although background is preferred, no one is pending for submission. + * don't issue workqueue for decompression but drop it directly instead. + */ + if (!*force_fg && !nr_bios) { + kvfree(q[JQ_SUBMIT]); return true; - + } z_erofs_decompress_kickoff(q[JQ_SUBMIT], *force_fg, nr_bios); return true; } -- 2.17.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() 2020-01-21 6:47 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang @ 2020-01-21 6:48 ` Gao Xiang 2020-01-21 8:02 ` Chao Yu 2020-01-21 8:01 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Chao Yu 1 sibling, 1 reply; 6+ messages in thread From: Gao Xiang @ 2020-01-21 6:48 UTC (permalink / raw) To: Chao Yu, linux-erofs; +Cc: Miao Xie, linux-kernel A label and extra variables will be eliminated, which is more cleaner. Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> --- 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 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() 2020-01-21 6:48 ` [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang @ 2020-01-21 8:02 ` Chao Yu 0 siblings, 0 replies; 6+ messages in thread From: Chao Yu @ 2020-01-21 8:02 UTC (permalink / raw) To: Gao Xiang, linux-erofs; +Cc: Miao Xie, linux-kernel On 2020/1/21 14:48, Gao Xiang wrote: > A label and extra variables will be eliminated, > which is more cleaner. > > Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Thanks, ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() 2020-01-21 6:47 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang 2020-01-21 6:48 ` [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang @ 2020-01-21 8:01 ` Chao Yu 1 sibling, 0 replies; 6+ messages in thread From: Chao Yu @ 2020-01-21 8:01 UTC (permalink / raw) To: Gao Xiang, linux-erofs; +Cc: Miao Xie, linux-kernel On 2020/1/21 14:47, Gao Xiang wrote: > No need to introduce such separated helper since > cache strategy compile configs were changed into > runtime options instead in v5.4. No logic changes. > > Signed-off-by: Gao Xiang <gaoxiang25@huawei.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Thanks, ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-01-21 8:03 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20200120085709.10320-1-hsiangkao.ref@aol.com> 2020-01-20 8:57 ` [PATCH 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang via Linux-erofs 2020-01-20 8:57 ` [PATCH 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang via Linux-erofs 2020-01-21 6:47 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Gao Xiang 2020-01-21 6:48 ` [PATCH v2 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang 2020-01-21 8:02 ` Chao Yu 2020-01-21 8:01 ` [PATCH v2 1/2] erofs: fold in postsubmit_is_all_bypassed() Chao Yu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).