Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
4d775673
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,发现更多精彩内容 >>
提交
4d775673
编写于
4月 20, 2007
作者:
C
Chris Mason
提交者:
David Woodhouse
4月 20, 2007
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Btrfs: add owner and type fields to the extents aand block headers
Signed-off-by:
N
Chris Mason
<
chris.mason@oracle.com
>
上级
33ade1f8
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
65 addition
and
14 deletion
+65
-14
fs/btrfs/ctree.c
fs/btrfs/ctree.c
+5
-0
fs/btrfs/ctree.h
fs/btrfs/ctree.h
+42
-3
fs/btrfs/disk-io.c
fs/btrfs/disk-io.c
+1
-0
fs/btrfs/extent-tree.c
fs/btrfs/extent-tree.c
+10
-5
fs/btrfs/super.c
fs/btrfs/super.c
+7
-6
未找到文件。
fs/btrfs/ctree.c
浏览文件 @
4d775673
...
...
@@ -68,6 +68,7 @@ static int btrfs_cow_block(struct btrfs_trans_handle *trans, struct btrfs_root
memcpy
(
cow_node
,
btrfs_buffer_node
(
buf
),
root
->
blocksize
);
btrfs_set_header_blocknr
(
&
cow_node
->
header
,
bh_blocknr
(
cow
));
btrfs_set_header_generation
(
&
cow_node
->
header
,
trans
->
transid
);
btrfs_set_header_owner
(
&
cow_node
->
header
,
root
->
root_key
.
objectid
);
btrfs_inc_ref
(
trans
,
root
,
buf
);
if
(
buf
==
root
->
node
)
{
root
->
node
=
cow
;
...
...
@@ -806,6 +807,7 @@ static int insert_new_root(struct btrfs_trans_handle *trans, struct btrfs_root
btrfs_set_header_level
(
&
c
->
header
,
level
);
btrfs_set_header_blocknr
(
&
c
->
header
,
bh_blocknr
(
t
));
btrfs_set_header_generation
(
&
c
->
header
,
trans
->
transid
);
btrfs_set_header_owner
(
&
c
->
header
,
root
->
root_key
.
objectid
);
lower
=
btrfs_buffer_node
(
path
->
nodes
[
level
-
1
]);
memcpy
(
c
->
header
.
fsid
,
root
->
fs_info
->
disk_super
->
fsid
,
sizeof
(
c
->
header
.
fsid
));
...
...
@@ -909,6 +911,7 @@ static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
btrfs_set_header_level
(
&
split
->
header
,
btrfs_header_level
(
&
c
->
header
));
btrfs_set_header_blocknr
(
&
split
->
header
,
bh_blocknr
(
split_buffer
));
btrfs_set_header_generation
(
&
split
->
header
,
trans
->
transid
);
btrfs_set_header_owner
(
&
split
->
header
,
root
->
root_key
.
objectid
);
memcpy
(
split
->
header
.
fsid
,
root
->
fs_info
->
disk_super
->
fsid
,
sizeof
(
split
->
header
.
fsid
));
mid
=
(
c_nritems
+
1
)
/
2
;
...
...
@@ -1280,6 +1283,7 @@ static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root
memset
(
&
right
->
header
,
0
,
sizeof
(
right
->
header
));
btrfs_set_header_blocknr
(
&
right
->
header
,
bh_blocknr
(
right_buffer
));
btrfs_set_header_generation
(
&
right
->
header
,
trans
->
transid
);
btrfs_set_header_owner
(
&
right
->
header
,
root
->
root_key
.
objectid
);
btrfs_set_header_level
(
&
right
->
header
,
0
);
memcpy
(
right
->
header
.
fsid
,
root
->
fs_info
->
disk_super
->
fsid
,
sizeof
(
right
->
header
.
fsid
));
...
...
@@ -1376,6 +1380,7 @@ static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root
memset
(
&
right
->
header
,
0
,
sizeof
(
right
->
header
));
btrfs_set_header_blocknr
(
&
right
->
header
,
bh_blocknr
(
right_buffer
));
btrfs_set_header_generation
(
&
right
->
header
,
trans
->
transid
);
btrfs_set_header_owner
(
&
right
->
header
,
root
->
root_key
.
objectid
);
btrfs_set_header_level
(
&
right
->
header
,
0
);
memcpy
(
right
->
header
.
fsid
,
root
->
fs_info
->
disk_super
->
fsid
,
sizeof
(
right
->
header
.
fsid
));
...
...
fs/btrfs/ctree.h
浏览文件 @
4d775673
...
...
@@ -62,6 +62,7 @@ struct btrfs_header {
u8
fsid
[
16
];
/* FS specific uuid */
__le64
blocknr
;
/* which block this node is supposed to live in */
__le64
generation
;
__le64
owner
;
__le16
nritems
;
__le16
flags
;
u8
level
;
...
...
@@ -151,12 +152,17 @@ struct btrfs_path {
int
slots
[
BTRFS_MAX_LEVEL
];
};
/* values for the type field in btrfs_extent_item */
#define BTRFS_EXTENT_TREE 1
#define BTRFS_EXTENT_FILE 2
/*
* items in the extent btree are used to record the objectid of the
* owner of the block and the number of references
*/
struct
btrfs_extent_item
{
__le32
refs
;
__le64
owner
;
u8
type
;
}
__attribute__
((
__packed__
));
struct
btrfs_inode_timespec
{
...
...
@@ -473,11 +479,32 @@ static inline void btrfs_set_extent_refs(struct btrfs_extent_item *ei, u32 val)
ei
->
refs
=
cpu_to_le32
(
val
);
}
static
inline
u64
btrfs_extent_owner
(
struct
btrfs_extent_item
*
ei
)
{
return
le64_to_cpu
(
ei
->
owner
);
}
static
inline
void
btrfs_set_extent_owner
(
struct
btrfs_extent_item
*
ei
,
u64
val
)
{
ei
->
owner
=
cpu_to_le64
(
val
);
}
static
inline
u8
btrfs_extent_type
(
struct
btrfs_extent_item
*
ei
)
{
return
ei
->
type
;
}
static
inline
void
btrfs_set_extent_type
(
struct
btrfs_extent_item
*
ei
,
u8
val
)
{
ei
->
type
=
val
;
}
static
inline
u64
btrfs_node_blockptr
(
struct
btrfs_node
*
n
,
int
nr
)
{
return
le64_to_cpu
(
n
->
ptrs
[
nr
].
blockptr
);
}
static
inline
void
btrfs_set_node_blockptr
(
struct
btrfs_node
*
n
,
int
nr
,
u64
val
)
{
...
...
@@ -636,6 +663,17 @@ static inline void btrfs_set_header_generation(struct btrfs_header *h,
h
->
generation
=
cpu_to_le64
(
val
);
}
static
inline
u64
btrfs_header_owner
(
struct
btrfs_header
*
h
)
{
return
le64_to_cpu
(
h
->
owner
);
}
static
inline
void
btrfs_set_header_owner
(
struct
btrfs_header
*
h
,
u64
val
)
{
h
->
owner
=
cpu_to_le64
(
val
);
}
static
inline
u16
btrfs_header_nritems
(
struct
btrfs_header
*
h
)
{
return
le16_to_cpu
(
h
->
nritems
);
...
...
@@ -996,9 +1034,10 @@ int btrfs_inc_root_ref(struct btrfs_trans_handle *trans,
struct
btrfs_root
*
root
);
struct
buffer_head
*
btrfs_alloc_free_block
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
);
int
btrfs_alloc_extent
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
u64
num_blocks
,
u64
search_start
,
u64
search_end
,
struct
btrfs_key
*
ins
);
int
btrfs_alloc_extent
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
u64
owner
,
u8
type
,
u64
num_blocks
,
u64
search_start
,
u64
search_end
,
struct
btrfs_key
*
ins
);
int
btrfs_inc_ref
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
struct
buffer_head
*
buf
);
int
btrfs_free_extent
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
...
...
fs/btrfs/disk-io.c
浏览文件 @
4d775673
...
...
@@ -319,6 +319,7 @@ static int __setup_root(int blocksize,
root
->
last_inode_alloc
=
0
;
memset
(
&
root
->
root_key
,
0
,
sizeof
(
root
->
root_key
));
memset
(
&
root
->
root_item
,
0
,
sizeof
(
root
->
root_item
));
root
->
root_key
.
objectid
=
objectid
;
return
0
;
}
...
...
fs/btrfs/extent-tree.c
浏览文件 @
4d775673
...
...
@@ -460,9 +460,10 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
*
* returns 0 if everything worked, non-zero otherwise.
*/
int
btrfs_alloc_extent
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
u64
num_blocks
,
u64
search_start
,
u64
search_end
,
struct
btrfs_key
*
ins
)
int
btrfs_alloc_extent
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
u64
owner
,
u8
type
,
u64
num_blocks
,
u64
search_start
,
u64
search_end
,
struct
btrfs_key
*
ins
)
{
int
ret
;
int
pending_ret
;
...
...
@@ -472,6 +473,8 @@ int btrfs_alloc_extent(struct btrfs_trans_handle *trans, struct btrfs_root
struct
btrfs_extent_item
extent_item
;
btrfs_set_extent_refs
(
&
extent_item
,
1
);
btrfs_set_extent_owner
(
&
extent_item
,
owner
);
btrfs_set_extent_type
(
&
extent_item
,
type
);
if
(
root
==
extent_root
)
{
BUG_ON
(
extent_root
->
fs_info
->
current_insert
.
offset
==
0
);
...
...
@@ -514,7 +517,9 @@ struct buffer_head *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
int
ret
;
struct
buffer_head
*
buf
;
ret
=
btrfs_alloc_extent
(
trans
,
root
,
1
,
0
,
(
unsigned
long
)
-
1
,
&
ins
);
ret
=
btrfs_alloc_extent
(
trans
,
root
,
root
->
root_key
.
objectid
,
BTRFS_EXTENT_TREE
,
1
,
0
,
(
unsigned
long
)
-
1
,
&
ins
);
if
(
ret
)
{
BUG
();
return
NULL
;
...
...
fs/btrfs/super.c
浏览文件 @
4d775673
...
...
@@ -1819,7 +1819,8 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf,
}
if
(
inode
->
i_size
>=
PAGE_CACHE_SIZE
||
pos
+
count
<
inode
->
i_size
||
pos
+
count
-
start_pos
>
BTRFS_MAX_INLINE_DATA_SIZE
(
root
))
{
ret
=
btrfs_alloc_extent
(
trans
,
root
,
num_blocks
,
1
,
ret
=
btrfs_alloc_extent
(
trans
,
root
,
inode
->
i_ino
,
BTRFS_EXTENT_FILE
,
num_blocks
,
1
,
(
u64
)
-
1
,
&
ins
);
BUG_ON
(
ret
);
ret
=
btrfs_insert_file_extent
(
trans
,
root
,
inode
->
i_ino
,
...
...
@@ -2017,8 +2018,12 @@ static int create_subvol(struct btrfs_root *root, char *name, int namelen)
btrfs_set_header_level
(
&
leaf
->
header
,
0
);
btrfs_set_header_blocknr
(
&
leaf
->
header
,
bh_blocknr
(
subvol
));
btrfs_set_header_generation
(
&
leaf
->
header
,
trans
->
transid
);
btrfs_set_header_owner
(
&
leaf
->
header
,
root
->
root_key
.
objectid
);
memcpy
(
leaf
->
header
.
fsid
,
root
->
fs_info
->
disk_super
->
fsid
,
sizeof
(
leaf
->
header
.
fsid
));
mark_buffer_dirty
(
subvol
);
brelse
(
subvol
);
subvol
=
NULL
;
inode_item
=
&
root_item
.
inode
;
memset
(
inode_item
,
0
,
sizeof
(
*
inode_item
));
...
...
@@ -2031,10 +2036,6 @@ static int create_subvol(struct btrfs_root *root, char *name, int namelen)
btrfs_set_root_blocknr
(
&
root_item
,
bh_blocknr
(
subvol
));
btrfs_set_root_refs
(
&
root_item
,
1
);
mark_buffer_dirty
(
subvol
);
brelse
(
subvol
);
subvol
=
NULL
;
ret
=
btrfs_find_free_objectid
(
trans
,
root
->
fs_info
->
tree_root
,
0
,
&
objectid
);
BUG_ON
(
ret
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录