__ufs_truncate(); find cutoff distances into branches by offsets[] array

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2015-06-18 14:28:54 -04:00
parent 7bad5939fc
commit 7a4fdda724
1 changed files with 6 additions and 2 deletions

View File

@ -1324,12 +1324,16 @@ static void __ufs_truncate_blocks(struct inode *inode)
ufs_trunc_tindirect(inode, 0); ufs_trunc_tindirect(inode, 0);
break; break;
case 3: case 3:
ufs_trunc_dindirect(inode, DIRECT_BLOCK - UFS_IND_BLOCK - uspi->s_apb, ufs_trunc_dindirect(inode,
(offsets[1] << uspi->s_apbshift) + offsets[2],
ufs_get_direct_data_ptr(uspi, ufsi, UFS_DIND_BLOCK)); ufs_get_direct_data_ptr(uspi, ufsi, UFS_DIND_BLOCK));
ufs_trunc_tindirect(inode, 0); ufs_trunc_tindirect(inode, 0);
break; break;
case 4: case 4:
ufs_trunc_tindirect(inode, DIRECT_BLOCK - UFS_NDADDR - uspi->s_apb - uspi->s_2apb); ufs_trunc_tindirect(inode,
(offsets[1] << uspi->s_2apbshift) +
(offsets[2] << uspi->s_apbshift) +
offsets[3]);
} }
ufsi->i_lastfrag = DIRECT_FRAGMENT; ufsi->i_lastfrag = DIRECT_FRAGMENT;
mutex_unlock(&ufsi->truncate_mutex); mutex_unlock(&ufsi->truncate_mutex);