Commit 2a13fc41 authored by Gao Xiang's avatar Gao Xiang
Browse files

erofs: consolidate z_erofs_extent_lookback()



The initial m.delta[0] also needs to be checked against zero.

In addition, also drop the redundant logic that errors out for
lcn == 0 / m.delta[0] == 1 case.

Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
parent e13d315a
Loading
Loading
Loading
Loading
+6 −14
Original line number Diff line number Diff line
@@ -272,21 +272,20 @@ static int z_erofs_extent_lookback(struct z_erofs_maprecorder *m,
		unsigned long lcn = m->lcn - lookback_distance;
		int err;

		if (!lookback_distance)
			break;

		err = z_erofs_load_lcluster_from_disk(m, lcn, false);
		if (err)
			return err;

		if (m->type == Z_EROFS_LCLUSTER_TYPE_NONHEAD) {
			lookback_distance = m->delta[0];
			if (!lookback_distance)
				break;
			continue;
		} else {
		}
		m->headtype = m->type;
		m->map->m_la = (lcn << lclusterbits) | m->clusterofs;
		return 0;
	}
	}
	erofs_err(sb, "bogus lookback distance %u @ lcn %lu of nid %llu",
		  lookback_distance, m->lcn, vi->nid);
	DBG_BUGON(1);
@@ -435,13 +434,6 @@ static int z_erofs_map_blocks_fo(struct inode *inode,
			end = inode->i_size;
	} else {
		if (m.type != Z_EROFS_LCLUSTER_TYPE_NONHEAD) {
			/* m.lcn should be >= 1 if endoff < m.clusterofs */
			if (!m.lcn) {
				erofs_err(sb, "invalid logical cluster 0 at nid %llu",
					  vi->nid);
				err = -EFSCORRUPTED;
				goto unmap_out;
			}
			end = (m.lcn << lclusterbits) | m.clusterofs;
			map->m_flags |= EROFS_MAP_FULL_MAPPED;
			m.delta[0] = 1;