zmap.c (47e4937a4a7ca4184fd282791dfee76c6799966a) | zmap.c (8d8a09b093d7073465c824f74caf315c073d3875) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2018-2019 HUAWEI, Inc. 4 * http://www.huawei.com/ 5 * Created by Gao Xiang <gaoxiang25@huawei.com> 6 */ 7#include "internal.h" 8#include <asm/unaligned.h> --- 334 unchanged lines hidden (view full) --- 343 /* load extent head logical cluster if needed */ 344 lcn -= lookback_distance; 345 err = vle_load_cluster_from_disk(m, lcn); 346 if (err) 347 return err; 348 349 switch (m->type) { 350 case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD: | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2018-2019 HUAWEI, Inc. 4 * http://www.huawei.com/ 5 * Created by Gao Xiang <gaoxiang25@huawei.com> 6 */ 7#include "internal.h" 8#include <asm/unaligned.h> --- 334 unchanged lines hidden (view full) --- 343 /* load extent head logical cluster if needed */ 344 lcn -= lookback_distance; 345 err = vle_load_cluster_from_disk(m, lcn); 346 if (err) 347 return err; 348 349 switch (m->type) { 350 case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD: |
351 if (unlikely(!m->delta[0])) { | 351 if (!m->delta[0]) { |
352 errln("invalid lookback distance 0 at nid %llu", 353 vi->nid); 354 DBG_BUGON(1); 355 return -EFSCORRUPTED; 356 } 357 return vle_extent_lookback(m, m->delta[0]); 358 case Z_EROFS_VLE_CLUSTER_TYPE_PLAIN: 359 map->m_flags &= ~EROFS_MAP_ZIPPED; --- 21 unchanged lines hidden (view full) --- 381 }; 382 int err = 0; 383 unsigned int lclusterbits, endoff; 384 unsigned long long ofs, end; 385 386 trace_z_erofs_map_blocks_iter_enter(inode, map, flags); 387 388 /* when trying to read beyond EOF, leave it unmapped */ | 352 errln("invalid lookback distance 0 at nid %llu", 353 vi->nid); 354 DBG_BUGON(1); 355 return -EFSCORRUPTED; 356 } 357 return vle_extent_lookback(m, m->delta[0]); 358 case Z_EROFS_VLE_CLUSTER_TYPE_PLAIN: 359 map->m_flags &= ~EROFS_MAP_ZIPPED; --- 21 unchanged lines hidden (view full) --- 381 }; 382 int err = 0; 383 unsigned int lclusterbits, endoff; 384 unsigned long long ofs, end; 385 386 trace_z_erofs_map_blocks_iter_enter(inode, map, flags); 387 388 /* when trying to read beyond EOF, leave it unmapped */ |
389 if (unlikely(map->m_la >= inode->i_size)) { | 389 if (map->m_la >= inode->i_size) { |
390 map->m_llen = map->m_la + 1 - inode->i_size; 391 map->m_la = inode->i_size; 392 map->m_flags = 0; 393 goto out; 394 } 395 396 err = fill_inode_lazy(inode); 397 if (err) --- 17 unchanged lines hidden (view full) --- 415 map->m_flags &= ~EROFS_MAP_ZIPPED; 416 /* fallthrough */ 417 case Z_EROFS_VLE_CLUSTER_TYPE_HEAD: 418 if (endoff >= m.clusterofs) { 419 map->m_la = (m.lcn << lclusterbits) | m.clusterofs; 420 break; 421 } 422 /* m.lcn should be >= 1 if endoff < m.clusterofs */ | 390 map->m_llen = map->m_la + 1 - inode->i_size; 391 map->m_la = inode->i_size; 392 map->m_flags = 0; 393 goto out; 394 } 395 396 err = fill_inode_lazy(inode); 397 if (err) --- 17 unchanged lines hidden (view full) --- 415 map->m_flags &= ~EROFS_MAP_ZIPPED; 416 /* fallthrough */ 417 case Z_EROFS_VLE_CLUSTER_TYPE_HEAD: 418 if (endoff >= m.clusterofs) { 419 map->m_la = (m.lcn << lclusterbits) | m.clusterofs; 420 break; 421 } 422 /* m.lcn should be >= 1 if endoff < m.clusterofs */ |
423 if (unlikely(!m.lcn)) { | 423 if (!m.lcn) { |
424 errln("invalid logical cluster 0 at nid %llu", 425 vi->nid); 426 err = -EFSCORRUPTED; 427 goto unmap_out; 428 } 429 end = (m.lcn << lclusterbits) | m.clusterofs; 430 map->m_flags |= EROFS_MAP_FULL_MAPPED; 431 m.delta[0] = 1; 432 /* fallthrough */ 433 case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD: 434 /* get the correspoinding first chunk */ 435 err = vle_extent_lookback(&m, m.delta[0]); | 424 errln("invalid logical cluster 0 at nid %llu", 425 vi->nid); 426 err = -EFSCORRUPTED; 427 goto unmap_out; 428 } 429 end = (m.lcn << lclusterbits) | m.clusterofs; 430 map->m_flags |= EROFS_MAP_FULL_MAPPED; 431 m.delta[0] = 1; 432 /* fallthrough */ 433 case Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD: 434 /* get the correspoinding first chunk */ 435 err = vle_extent_lookback(&m, m.delta[0]); |
436 if (unlikely(err)) | 436 if (err) |
437 goto unmap_out; 438 break; 439 default: 440 errln("unknown type %u at offset %llu of nid %llu", 441 m.type, ofs, vi->nid); 442 err = -EOPNOTSUPP; 443 goto unmap_out; 444 } --- 22 unchanged lines hidden --- | 437 goto unmap_out; 438 break; 439 default: 440 errln("unknown type %u at offset %llu of nid %llu", 441 m.type, ofs, vi->nid); 442 err = -EOPNOTSUPP; 443 goto unmap_out; 444 } --- 22 unchanged lines hidden --- |