Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit ef878d21 authored by Gao Xiang's avatar Gao Xiang Committed by Michael Bestas
Browse files

erofs: clean up z_erofs_submit_queue()

A label and extra variables will be eliminated,
which is more cleaner.

Link: https://lore.kernel.org/r/20200121064819.139469-1-gaoxiang25@huawei.com


Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
Change-Id: Ie2695bb8cb46b4e2aa4b979b7558b02c52079af9
Signed-off-by: default avatarGao Xiang <gaoxiang25@huawei.com>
parent 19725491
Loading
Loading
Loading
Loading
+40 −55
Original line number Diff line number Diff line
@@ -1149,7 +1149,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,
@@ -1158,19 +1158,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;
@@ -1180,11 +1173,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);
@@ -1192,26 +1183,24 @@ 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,
			page = pickup_page_for_submission(pcl, i++, pagepool,
							  MNGD_MAPPING(sbi),
							  GFP_NOFS);
		if (!page) {
			force_submit = true;
			++bypass;
			goto skippage;
		}
			if (!page)
				continue;

		if (bio && force_submit) {
			if (bio && cur != last_index + 1) {
submit_bio_retry:
				submit_bio(bio);
				bio = NULL;
@@ -1222,11 +1211,10 @@ static bool z_erofs_submit_queue(struct super_block *sb,

				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) <<
				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;
			}

@@ -1234,13 +1222,11 @@ static bool z_erofs_submit_queue(struct super_block *sb,
			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);
@@ -1255,10 +1241,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,
@@ -1267,9 +1252,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);