Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
00f5c795
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
00f5c795
编写于
11月 30, 2007
作者:
C
Chris Mason
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
btrfs_drop_extents: make sure the item is getting smaller before truncate
Signed-off-by:
N
Chris Mason
<
chris.mason@oracle.com
>
上级
ca664626
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
24 addition
and
16 deletion
+24
-16
fs/btrfs/ctree.h
fs/btrfs/ctree.h
+1
-1
fs/btrfs/extent-tree.c
fs/btrfs/extent-tree.c
+8
-0
fs/btrfs/file.c
fs/btrfs/file.c
+15
-15
未找到文件。
fs/btrfs/ctree.h
浏览文件 @
00f5c795
...
...
@@ -1037,7 +1037,7 @@ int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end);
extern
struct
file_operations
btrfs_file_operations
;
int
btrfs_drop_extents
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
struct
inode
*
inode
,
u64
start
,
u64
end
,
u64
inline_
end
,
u64
*
hint_block
);
u64
start
,
u64
end
,
u64
inline_
limit
,
u64
*
hint_block
);
/* tree-defrag.c */
int
btrfs_defrag_leaves
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
int
cache_only
);
...
...
fs/btrfs/extent-tree.c
浏览文件 @
00f5c795
...
...
@@ -45,6 +45,9 @@ static int cache_block_group(struct btrfs_root *root,
u64
first_free
;
int
found
=
0
;
if
(
!
block_group
)
return
0
;
root
=
root
->
fs_info
->
extent_root
;
free_space_cache
=
&
root
->
fs_info
->
free_space_cache
;
...
...
@@ -168,6 +171,11 @@ static u64 find_search_start(struct btrfs_root *root,
u64
cache_miss
=
0
;
int
wrapped
=
0
;
if
(
!
cache
)
{
cache
=
btrfs_lookup_block_group
(
root
->
fs_info
,
search_start
);
if
(
!
cache
)
return
search_start
;
}
again:
ret
=
cache_block_group
(
root
,
cache
);
if
(
ret
)
...
...
fs/btrfs/file.c
浏览文件 @
00f5c795
...
...
@@ -377,23 +377,23 @@ int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end)
*/
int
btrfs_drop_extents
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
struct
inode
*
inode
,
u64
start
,
u64
end
,
u64
inline_
end
,
u64
*
hint_byte
)
u64
start
,
u64
end
,
u64
inline_
limit
,
u64
*
hint_byte
)
{
int
ret
;
struct
btrfs_key
key
;
u64
extent_end
=
0
;
u64
search_start
=
start
;
struct
extent_buffer
*
leaf
;
int
slot
;
struct
btrfs_file_extent_item
*
extent
;
u64
extent_end
=
0
;
int
keep
;
struct
btrfs_file_extent_item
old
;
struct
btrfs_path
*
path
;
u64
search_start
=
start
;
struct
btrfs_key
key
;
struct
btrfs_file_extent_item
old
;
int
keep
;
int
slot
;
int
bookend
;
int
found_type
;
int
found_extent
;
int
found_inline
;
int
recow
;
int
ret
;
btrfs_drop_extent_cache
(
inode
,
start
,
end
-
1
);
...
...
@@ -502,7 +502,7 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
}
bookend
=
1
;
if
(
found_inline
&&
start
<=
key
.
offset
&&
inline_
end
<
extent_end
)
inline_
limit
<
extent_end
)
keep
=
1
;
}
/* truncate existing extent */
...
...
@@ -526,12 +526,12 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
btrfs_set_file_extent_num_bytes
(
leaf
,
extent
,
new_num
);
btrfs_mark_buffer_dirty
(
leaf
);
}
else
if
(
end
>
extent_end
&&
key
.
offset
<
inline_end
&&
inline_end
<
extent_end
)
{
}
else
if
(
key
.
offset
<
inline_limit
&&
(
end
>
extent_end
)
&&
(
inline_limit
<
extent_end
)
)
{
u32
new_size
;
new_size
=
btrfs_file_extent_calc_inline_size
(
inline_
end
-
key
.
offset
);
inline_
limit
-
key
.
offset
);
btrfs_truncate_item
(
trans
,
root
,
path
,
new_size
,
1
);
}
...
...
@@ -575,10 +575,10 @@ int btrfs_drop_extents(struct btrfs_trans_handle *trans,
continue
;
}
if
(
bookend
&&
found_inline
&&
start
<=
key
.
offset
&&
inline_
end
<
extent_end
)
{
inline_
limit
<
extent_end
&&
key
.
offset
<=
inline_limit
)
{
u32
new_size
;
new_size
=
btrfs_file_extent_calc_inline_size
(
extent_end
-
inline_
end
);
extent_end
-
inline_
limit
);
btrfs_truncate_item
(
trans
,
root
,
path
,
new_size
,
0
);
}
/* create bookend, splitting the extent in two */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录