__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

View File

@ -1324,12 +1324,16 @@ static void __ufs_truncate_blocks(struct inode *inode)
ufs_trunc_tindirect(inode, 0);
break;
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_trunc_tindirect(inode, 0);
break;
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;
mutex_unlock(&ufsi->truncate_mutex);