Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
e4204ded
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e4204ded
编写于
1月 08, 2008
作者:
C
Chris Mason
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Btrfs: Change tree block csum tagging to avoid false error messages
Signed-off-by:
N
Chris Mason
<
chris.mason@oracle.com
>
上级
725c8463
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
10 deletion
+36
-10
fs/btrfs/disk-io.c
fs/btrfs/disk-io.c
+36
-10
未找到文件。
fs/btrfs/disk-io.c
浏览文件 @
e4204ded
...
...
@@ -145,10 +145,25 @@ static int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
btrfs_csum_final
(
crc
,
result
);
if
(
verify
)
{
if
(
memcmp_extent_buffer
(
buf
,
result
,
0
,
BTRFS_CRC32_SIZE
))
{
printk
(
"btrfs: %s checksum verify failed on %llu
\n
"
,
int
from_this_trans
=
0
;
if
(
root
->
fs_info
->
running_transaction
&&
btrfs_header_generation
(
buf
)
==
root
->
fs_info
->
running_transaction
->
transid
)
from_this_trans
=
1
;
/* FIXME, this is not good */
if
(
from_this_trans
==
0
&&
memcmp_extent_buffer
(
buf
,
result
,
0
,
BTRFS_CRC32_SIZE
))
{
u32
val
;
u32
found
=
0
;
memcpy
(
&
found
,
result
,
BTRFS_CRC32_SIZE
);
read_extent_buffer
(
buf
,
&
val
,
0
,
BTRFS_CRC32_SIZE
);
printk
(
"btrfs: %s checksum verify failed on %llu "
"wanted %X found %X from_this_trans %d
\n
"
,
root
->
fs_info
->
sb
->
s_id
,
buf
->
start
);
buf
->
start
,
val
,
found
,
from_this_trans
);
return
1
;
}
}
else
{
...
...
@@ -313,6 +328,7 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr,
struct
extent_buffer
*
buf
=
NULL
;
struct
inode
*
btree_inode
=
root
->
fs_info
->
btree_inode
;
struct
extent_map_tree
*
extent_tree
;
u64
end
;
int
ret
;
extent_tree
=
&
BTRFS_I
(
btree_inode
)
->
extent_tree
;
...
...
@@ -322,19 +338,29 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr,
return
NULL
;
read_extent_buffer_pages
(
&
BTRFS_I
(
btree_inode
)
->
extent_tree
,
buf
,
0
,
1
);
if
(
buf
->
flags
&
EXTENT_CSUM
)
{
if
(
buf
->
flags
&
EXTENT_CSUM
)
return
buf
;
}
if
(
test_range_bit
(
extent_tree
,
buf
->
start
,
buf
->
start
+
buf
->
len
-
1
,
EXTENT_CSUM
,
1
))
{
end
=
buf
->
start
+
PAGE_CACHE_SIZE
-
1
;
if
(
test_range_bit
(
extent_tree
,
buf
->
start
,
end
,
EXTENT_CSUM
,
1
))
{
buf
->
flags
|=
EXTENT_CSUM
;
return
buf
;
}
lock_extent
(
extent_tree
,
buf
->
start
,
end
,
GFP_NOFS
);
if
(
test_range_bit
(
extent_tree
,
buf
->
start
,
end
,
EXTENT_CSUM
,
1
))
{
buf
->
flags
|=
EXTENT_CSUM
;
goto
out_unlock
;
}
ret
=
csum_tree_block
(
root
,
buf
,
1
);
set_extent_bits
(
extent_tree
,
buf
->
start
,
buf
->
start
+
buf
->
len
-
1
,
EXTENT_CSUM
,
GFP_NOFS
);
set_extent_bits
(
extent_tree
,
buf
->
start
,
end
,
EXTENT_CSUM
,
GFP_NOFS
);
buf
->
flags
|=
EXTENT_CSUM
;
out_unlock:
unlock_extent
(
extent_tree
,
buf
->
start
,
end
,
GFP_NOFS
);
return
buf
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录