Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
0bd93ba0
Commit
0bd93ba0
authored
Apr 11, 2007
by
Chris Mason
Committed by
David Woodhouse
Apr 11, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Btrfs: early support for multiple devices
Signed-off-by:
Chris Mason
<
chris.mason@oracle.com
>
parent
cac87faa
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
76 additions
and
5 deletions
+76
-5
fs/btrfs/ctree.h
fs/btrfs/ctree.h
+65
-5
fs/btrfs/disk-io.c
fs/btrfs/disk-io.c
+11
-0
No files found.
fs/btrfs/ctree.h
View file @
0bd93ba0
...
...
@@ -13,10 +13,11 @@ extern struct kmem_cache *btrfs_path_cachep;
#define BTRFS_MAGIC "_BtRfS_M"
#define BTRFS_ROOT_TREE_OBJECTID 1ULL
#define BTRFS_EXTENT_TREE_OBJECTID 2ULL
#define BTRFS_FS_TREE_OBJECTID 3ULL
#define BTRFS_ROOT_TREE_DIR_OBJECTID 4ULL
#define BTRFS_FIRST_FREE_OBJECTID 5ULL
#define BTRFS_DEV_TREE_OBJECTID 2ULL
#define BTRFS_EXTENT_TREE_OBJECTID 3ULL
#define BTRFS_FS_TREE_OBJECTID 4ULL
#define BTRFS_ROOT_TREE_DIR_OBJECTID 5ULL
#define BTRFS_FIRST_FREE_OBJECTID 6ULL
/*
* we can actually store much bigger names, but lets not confuse the rest
...
...
@@ -90,6 +91,10 @@ struct btrfs_super_block {
__le64
total_blocks
;
__le64
blocks_used
;
__le64
root_dir_objectid
;
/* fields below here vary with the underlying disk */
__le64
device_block_start
;
__le64
device_num_blocks
;
__le64
device_root
;
}
__attribute__
((
__packed__
));
/*
...
...
@@ -223,10 +228,15 @@ struct btrfs_csum_item {
u8
csum
[
BTRFS_CSUM_SIZE
];
}
__attribute__
((
__packed__
));
struct
btrfs_device_item
{
__le16
pathlen
;
}
__attribute__
((
__packed__
));
struct
crypto_hash
;
struct
btrfs_fs_info
{
struct
btrfs_root
*
extent_root
;
struct
btrfs_root
*
tree_root
;
struct
btrfs_root
*
dev_root
;
struct
btrfs_key
current_insert
;
struct
btrfs_key
last_insert
;
struct
radix_tree_root
fs_roots_radix
;
...
...
@@ -312,11 +322,16 @@ struct btrfs_root {
*/
#define BTRFS_EXTENT_ITEM_KEY 8
/*
* dev items list the devices that make up the FS
*/
#define BTRFS_DEV_ITEM_KEY 9
/*
* string items are for debugging. They just store a short string of
* data in the FS
*/
#define BTRFS_STRING_ITEM_KEY
9
#define BTRFS_STRING_ITEM_KEY
10
static
inline
u64
btrfs_inode_generation
(
struct
btrfs_inode_item
*
i
)
{
...
...
@@ -782,6 +797,40 @@ static inline void btrfs_set_super_root_dir(struct btrfs_super_block *s, u64
s
->
root_dir_objectid
=
cpu_to_le64
(
val
);
}
static
inline
u64
btrfs_super_device_block_start
(
struct
btrfs_super_block
*
s
)
{
return
le64_to_cpu
(
s
->
device_block_start
);
}
static
inline
void
btrfs_set_super_device_block_start
(
struct
btrfs_super_block
*
s
,
u64
val
)
{
s
->
device_block_start
=
cpu_to_le64
(
val
);
}
static
inline
u64
btrfs_super_device_num_blocks
(
struct
btrfs_super_block
*
s
)
{
return
le64_to_cpu
(
s
->
device_num_blocks
);
}
static
inline
void
btrfs_set_super_device_num_blocks
(
struct
btrfs_super_block
*
s
,
u64
val
)
{
s
->
device_num_blocks
=
cpu_to_le64
(
val
);
}
static
inline
u64
btrfs_super_device_root
(
struct
btrfs_super_block
*
s
)
{
return
le64_to_cpu
(
s
->
device_root
);
}
static
inline
void
btrfs_set_super_device_root
(
struct
btrfs_super_block
*
s
,
u64
val
)
{
s
->
device_root
=
cpu_to_le64
(
val
);
}
static
inline
u8
*
btrfs_leaf_data
(
struct
btrfs_leaf
*
l
)
{
return
(
u8
*
)
l
->
items
;
...
...
@@ -849,6 +898,17 @@ static inline void btrfs_set_file_extent_num_blocks(struct
e
->
num_blocks
=
cpu_to_le64
(
val
);
}
static
inline
u16
btrfs_device_pathlen
(
struct
btrfs_device_item
*
d
)
{
return
le16_to_cpu
(
d
->
pathlen
);
}
static
inline
void
btrfs_set_device_pathlen
(
struct
btrfs_device_item
*
d
,
u16
val
)
{
d
->
pathlen
=
cpu_to_le16
(
val
);
}
static
inline
struct
btrfs_root
*
btrfs_sb
(
struct
super_block
*
sb
)
{
return
sb
->
s_fs_info
;
...
...
fs/btrfs/disk-io.c
View file @
0bd93ba0
...
...
@@ -378,6 +378,8 @@ struct btrfs_root *open_ctree(struct super_block *sb)
{
struct
btrfs_root
*
extent_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
GFP_NOFS
);
struct
btrfs_root
*
dev_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
GFP_NOFS
);
struct
btrfs_root
*
tree_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
GFP_NOFS
);
struct
btrfs_fs_info
*
fs_info
=
kmalloc
(
sizeof
(
*
fs_info
),
...
...
@@ -392,6 +394,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
fs_info
->
running_transaction
=
NULL
;
fs_info
->
tree_root
=
tree_root
;
fs_info
->
extent_root
=
extent_root
;
fs_info
->
dev_root
=
dev_root
;
fs_info
->
sb
=
sb
;
fs_info
->
btree_inode
=
new_inode
(
sb
);
fs_info
->
btree_inode
->
i_ino
=
1
;
...
...
@@ -414,6 +417,9 @@ struct btrfs_root *open_ctree(struct super_block *sb)
memset
(
&
fs_info
->
current_insert
,
0
,
sizeof
(
fs_info
->
current_insert
));
memset
(
&
fs_info
->
last_insert
,
0
,
sizeof
(
fs_info
->
last_insert
));
__setup_root
(
sb
->
s_blocksize
,
dev_root
,
fs_info
,
BTRFS_DEV_TREE_OBJECTID
);
__setup_root
(
sb
->
s_blocksize
,
tree_root
,
fs_info
,
BTRFS_ROOT_TREE_OBJECTID
);
fs_info
->
sb_buffer
=
read_tree_block
(
tree_root
,
...
...
@@ -427,6 +433,8 @@ struct btrfs_root *open_ctree(struct super_block *sb)
return
NULL
;
fs_info
->
disk_super
=
disk_super
;
dev_root
->
node
=
read_tree_block
(
tree_root
,
btrfs_super_device_root
(
disk_super
));
tree_root
->
node
=
read_tree_block
(
tree_root
,
btrfs_super_root
(
disk_super
));
BUG_ON
(
!
tree_root
->
node
);
...
...
@@ -519,6 +527,9 @@ int close_ctree(struct btrfs_root *root)
if
(
fs_info
->
extent_root
->
node
)
btrfs_block_release
(
fs_info
->
extent_root
,
fs_info
->
extent_root
->
node
);
if
(
fs_info
->
dev_root
->
node
)
btrfs_block_release
(
fs_info
->
dev_root
,
fs_info
->
dev_root
->
node
);
if
(
fs_info
->
tree_root
->
node
)
btrfs_block_release
(
fs_info
->
tree_root
,
fs_info
->
tree_root
->
node
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment