提交 31cd043e 编写于 作者: A Al Viro

ufs: beginning of __ufs_truncate_block() massage

Use ufs_block_to_path() to find the cutoff path in the block pointers' tree.
For now just use the information about the depth (to bypass the fully
preserved subtrees); subsequent commits will use the information about actual
path.
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 4e3911f3
......@@ -1336,14 +1336,22 @@ static void __ufs_truncate_blocks(struct inode *inode)
struct ufs_inode_info *ufsi = UFS_I(inode);
struct super_block *sb = inode->i_sb;
struct ufs_sb_private_info *uspi = UFS_SB(sb)->s_uspi;
unsigned offsets[4];
int depth = ufs_block_to_path(inode, DIRECT_BLOCK, offsets);
mutex_lock(&ufsi->truncate_mutex);
ufs_trunc_direct(inode);
ufs_trunc_indirect(inode, UFS_IND_BLOCK,
switch (depth) {
case 1:
ufs_trunc_direct(inode);
case 2:
ufs_trunc_indirect(inode, UFS_IND_BLOCK,
ufs_get_direct_data_ptr(uspi, ufsi, UFS_IND_BLOCK));
ufs_trunc_dindirect(inode, UFS_IND_BLOCK + uspi->s_apb,
case 3:
ufs_trunc_dindirect(inode, UFS_IND_BLOCK + uspi->s_apb,
ufs_get_direct_data_ptr(uspi, ufsi, UFS_DIND_BLOCK));
ufs_trunc_tindirect(inode);
case 4:
ufs_trunc_tindirect(inode);
}
ufsi->i_lastfrag = DIRECT_FRAGMENT;
mutex_unlock(&ufsi->truncate_mutex);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册