Commit 0d823b42 authored by Gao Xiang's avatar Gao Xiang
Browse files

erofs: clean up z_erofs_collector_begin()

parent 83a386c0
Loading
Loading
Loading
Loading
+15 −17
Original line number Diff line number Diff line
@@ -521,7 +521,7 @@ static int z_erofs_register_pcluster(struct z_erofs_decompress_frontend *fe)
static int z_erofs_collector_begin(struct z_erofs_decompress_frontend *fe)
{
	struct erofs_map_blocks *map = &fe->map;
	struct erofs_workgroup *grp;
	struct erofs_workgroup *grp = NULL;
	int ret;

	DBG_BUGON(fe->pcl);
@@ -530,33 +530,31 @@ static int z_erofs_collector_begin(struct z_erofs_decompress_frontend *fe)
	DBG_BUGON(fe->owned_head == Z_EROFS_PCLUSTER_NIL);
	DBG_BUGON(fe->owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED);

	if (map->m_flags & EROFS_MAP_META) {
		if ((map->m_pa & ~PAGE_MASK) + map->m_plen > PAGE_SIZE) {
	if (!(map->m_flags & EROFS_MAP_META)) {
		grp = erofs_find_workgroup(fe->inode->i_sb,
					   map->m_pa >> PAGE_SHIFT);
	} else if ((map->m_pa & ~PAGE_MASK) + map->m_plen > PAGE_SIZE) {
		DBG_BUGON(1);
		return -EFSCORRUPTED;
	}
		goto tailpacking;
	}

	grp = erofs_find_workgroup(fe->inode->i_sb, map->m_pa >> PAGE_SHIFT);
	if (grp) {
		fe->pcl = container_of(grp, struct z_erofs_pcluster, obj);
		ret = -EEXIST;
	} else {
tailpacking:
		ret = z_erofs_register_pcluster(fe);
		if (!ret)
			goto out;
		if (ret != -EEXIST)
			return ret;
	}

	if (ret == -EEXIST) {
		ret = z_erofs_lookup_pcluster(fe);
		if (ret) {
			erofs_workgroup_put(&fe->pcl->obj);
			return ret;
		}
	} else if (ret) {
		return ret;
	}

out:
	z_erofs_pagevec_ctor_init(&fe->vector, Z_EROFS_NR_INLINE_PAGEVECS,
				  fe->pcl->pagevec, fe->pcl->vcnt);
	/* since file-backed online pages are traversed in reverse order */