* [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
2020-01-20 8:57 ` [PATCH 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang
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 @ 2020-01-20 8:57 UTC (permalink / raw)
To: Chao Yu; +Cc: linux-erofs, linux-kernel, Chao Yu, Miao Xie, Gao Xiang
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
@ 2020-01-20 8:57 ` Gao Xiang
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 @ 2020-01-20 8:57 UTC (permalink / raw)
To: Chao Yu; +Cc: linux-erofs, linux-kernel, Chao Yu, Miao Xie, Gao Xiang
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
2020-01-20 8:57 ` [PATCH 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang
@ 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: linux-kernel, Miao Xie, Gao Xiang
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: linux-kernel, Miao Xie, Gao Xiang
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 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: linux-kernel, Miao Xie
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
* 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: linux-kernel, Miao Xie
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
end of thread, other threads:[~2020-01-21 8:02 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
2020-01-20 8:57 ` [PATCH 2/2] erofs: clean up z_erofs_submit_queue() Gao Xiang
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).