]> www.infradead.org Git - users/hch/misc.git/commitdiff
erofs: consolidate z_erofs_extent_lookback()
authorGao Xiang <hsiangkao@linux.alibaba.com>
Fri, 17 Oct 2025 07:05:39 +0000 (15:05 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Tue, 21 Oct 2025 23:54:31 +0000 (07:54 +0800)
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: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/erofs/zmap.c

index 08ec7b0e50a8118d1ce962e6eb6d65f7ed12509b..c8d8e129eb4bad1feca19324449f86952b5b7208 100644 (file)
@@ -272,20 +272,19 @@ 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;
                }
+               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);
@@ -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;