Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
87ee04eb
Commit
87ee04eb
authored
Nov 30, 2007
by
Chris Mason
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Btrfs: Add simple stripe size parameter
Signed-off-by:
Chris Mason
<
chris.mason@oracle.com
>
parent
00f5c795
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
43 additions
and
13 deletions
+43
-13
fs/btrfs/ctree.h
fs/btrfs/ctree.h
+5
-0
fs/btrfs/disk-io.c
fs/btrfs/disk-io.c
+10
-5
fs/btrfs/extent-tree.c
fs/btrfs/extent-tree.c
+28
-8
No files found.
fs/btrfs/ctree.h
View file @
87ee04eb
...
@@ -135,6 +135,7 @@ struct btrfs_super_block {
...
@@ -135,6 +135,7 @@ struct btrfs_super_block {
__le32
sectorsize
;
__le32
sectorsize
;
__le32
nodesize
;
__le32
nodesize
;
__le32
leafsize
;
__le32
leafsize
;
__le32
stripesize
;
u8
root_level
;
u8
root_level
;
}
__attribute__
((
__packed__
));
}
__attribute__
((
__packed__
));
...
@@ -353,6 +354,8 @@ struct btrfs_root {
...
@@ -353,6 +354,8 @@ struct btrfs_root {
/* leaf allocations are done in leafsize units */
/* leaf allocations are done in leafsize units */
u32
leafsize
;
u32
leafsize
;
u32
stripesize
;
u32
type
;
u32
type
;
u64
highest_inode
;
u64
highest_inode
;
u64
last_inode_alloc
;
u64
last_inode_alloc
;
...
@@ -776,6 +779,8 @@ BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block,
...
@@ -776,6 +779,8 @@ BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block,
nodesize
,
32
);
nodesize
,
32
);
BTRFS_SETGET_STACK_FUNCS
(
super_leafsize
,
struct
btrfs_super_block
,
BTRFS_SETGET_STACK_FUNCS
(
super_leafsize
,
struct
btrfs_super_block
,
leafsize
,
32
);
leafsize
,
32
);
BTRFS_SETGET_STACK_FUNCS
(
super_stripesize
,
struct
btrfs_super_block
,
stripesize
,
32
);
BTRFS_SETGET_STACK_FUNCS
(
super_root_dir
,
struct
btrfs_super_block
,
BTRFS_SETGET_STACK_FUNCS
(
super_root_dir
,
struct
btrfs_super_block
,
root_dir_objectid
,
64
);
root_dir_objectid
,
64
);
...
...
fs/btrfs/disk-io.c
View file @
87ee04eb
...
@@ -355,7 +355,7 @@ int wait_on_tree_block_writeback(struct btrfs_root *root,
...
@@ -355,7 +355,7 @@ int wait_on_tree_block_writeback(struct btrfs_root *root,
}
}
static
int
__setup_root
(
u32
nodesize
,
u32
leafsize
,
u32
sectorsize
,
static
int
__setup_root
(
u32
nodesize
,
u32
leafsize
,
u32
sectorsize
,
struct
btrfs_root
*
root
,
u32
stripesize
,
struct
btrfs_root
*
root
,
struct
btrfs_fs_info
*
fs_info
,
struct
btrfs_fs_info
*
fs_info
,
u64
objectid
)
u64
objectid
)
{
{
...
@@ -365,6 +365,7 @@ static int __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,
...
@@ -365,6 +365,7 @@ static int __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,
root
->
sectorsize
=
sectorsize
;
root
->
sectorsize
=
sectorsize
;
root
->
nodesize
=
nodesize
;
root
->
nodesize
=
nodesize
;
root
->
leafsize
=
leafsize
;
root
->
leafsize
=
leafsize
;
root
->
stripesize
=
stripesize
;
root
->
ref_cows
=
0
;
root
->
ref_cows
=
0
;
root
->
fs_info
=
fs_info
;
root
->
fs_info
=
fs_info
;
root
->
objectid
=
objectid
;
root
->
objectid
=
objectid
;
...
@@ -393,7 +394,8 @@ static int find_and_setup_root(struct btrfs_root *tree_root,
...
@@ -393,7 +394,8 @@ static int find_and_setup_root(struct btrfs_root *tree_root,
u32
blocksize
;
u32
blocksize
;
__setup_root
(
tree_root
->
nodesize
,
tree_root
->
leafsize
,
__setup_root
(
tree_root
->
nodesize
,
tree_root
->
leafsize
,
tree_root
->
sectorsize
,
root
,
fs_info
,
objectid
);
tree_root
->
sectorsize
,
tree_root
->
stripesize
,
root
,
fs_info
,
objectid
);
ret
=
btrfs_find_last_root
(
tree_root
,
objectid
,
ret
=
btrfs_find_last_root
(
tree_root
,
objectid
,
&
root
->
root_item
,
&
root
->
root_key
);
&
root
->
root_item
,
&
root
->
root_key
);
BUG_ON
(
ret
);
BUG_ON
(
ret
);
...
@@ -430,8 +432,8 @@ struct btrfs_root *btrfs_read_fs_root_no_radix(struct btrfs_fs_info *fs_info,
...
@@ -430,8 +432,8 @@ struct btrfs_root *btrfs_read_fs_root_no_radix(struct btrfs_fs_info *fs_info,
}
}
__setup_root
(
tree_root
->
nodesize
,
tree_root
->
leafsize
,
__setup_root
(
tree_root
->
nodesize
,
tree_root
->
leafsize
,
tree_root
->
sectorsize
,
root
,
fs_info
,
tree_root
->
sectorsize
,
tree_root
->
stripesize
,
location
->
objectid
);
root
,
fs_info
,
location
->
objectid
);
path
=
btrfs_alloc_path
();
path
=
btrfs_alloc_path
();
BUG_ON
(
!
path
);
BUG_ON
(
!
path
);
...
@@ -537,6 +539,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
...
@@ -537,6 +539,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
u32
nodesize
;
u32
nodesize
;
u32
leafsize
;
u32
leafsize
;
u32
blocksize
;
u32
blocksize
;
u32
stripesize
;
struct
btrfs_root
*
extent_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
struct
btrfs_root
*
extent_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
GFP_NOFS
);
GFP_NOFS
);
struct
btrfs_root
*
tree_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
struct
btrfs_root
*
tree_root
=
kmalloc
(
sizeof
(
struct
btrfs_root
),
...
@@ -607,7 +610,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
...
@@ -607,7 +610,7 @@ struct btrfs_root *open_ctree(struct super_block *sb)
goto fail_iput;
goto fail_iput;
}
}
#endif
#endif
__setup_root
(
512
,
512
,
512
,
tree_root
,
__setup_root
(
512
,
512
,
512
,
512
,
tree_root
,
fs_info
,
BTRFS_ROOT_TREE_OBJECTID
);
fs_info
,
BTRFS_ROOT_TREE_OBJECTID
);
fs_info
->
sb_buffer
=
read_tree_block
(
tree_root
,
fs_info
->
sb_buffer
=
read_tree_block
(
tree_root
,
...
@@ -630,9 +633,11 @@ struct btrfs_root *open_ctree(struct super_block *sb)
...
@@ -630,9 +633,11 @@ struct btrfs_root *open_ctree(struct super_block *sb)
nodesize
=
btrfs_super_nodesize
(
disk_super
);
nodesize
=
btrfs_super_nodesize
(
disk_super
);
leafsize
=
btrfs_super_leafsize
(
disk_super
);
leafsize
=
btrfs_super_leafsize
(
disk_super
);
sectorsize
=
btrfs_super_sectorsize
(
disk_super
);
sectorsize
=
btrfs_super_sectorsize
(
disk_super
);
stripesize
=
btrfs_super_stripesize
(
disk_super
);
tree_root
->
nodesize
=
nodesize
;
tree_root
->
nodesize
=
nodesize
;
tree_root
->
leafsize
=
leafsize
;
tree_root
->
leafsize
=
leafsize
;
tree_root
->
sectorsize
=
sectorsize
;
tree_root
->
sectorsize
=
sectorsize
;
tree_root
->
stripesize
=
stripesize
;
sb_set_blocksize
(
sb
,
sectorsize
);
sb_set_blocksize
(
sb
,
sectorsize
);
i_size_write
(
fs_info
->
btree_inode
,
i_size_write
(
fs_info
->
btree_inode
,
...
...
fs/btrfs/extent-tree.c
View file @
87ee04eb
...
@@ -932,6 +932,13 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
...
@@ -932,6 +932,13 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
return
ret
?
ret
:
pending_ret
;
return
ret
?
ret
:
pending_ret
;
}
}
static
u64
stripe_align
(
struct
btrfs_root
*
root
,
u64
val
)
{
u64
mask
=
((
u64
)
root
->
stripesize
-
1
);
u64
ret
=
(
val
+
mask
)
&
~
mask
;
return
ret
;
}
/*
/*
* walks the btree of allocated extents and find a hole of a given size.
* walks the btree of allocated extents and find a hole of a given size.
* The key ins is changed to record the hole:
* The key ins is changed to record the hole:
...
@@ -948,8 +955,9 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
...
@@ -948,8 +955,9 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
{
{
struct
btrfs_path
*
path
;
struct
btrfs_path
*
path
;
struct
btrfs_key
key
;
struct
btrfs_key
key
;
int
ret
;
u64
hole_size
=
0
;
u64
hole_size
=
0
;
u64
aligned
;
int
ret
;
int
slot
=
0
;
int
slot
=
0
;
u64
last_byte
=
0
;
u64
last_byte
=
0
;
u64
orig_search_start
=
search_start
;
u64
orig_search_start
=
search_start
;
...
@@ -990,6 +998,7 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
...
@@ -990,6 +998,7 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
check_failed:
check_failed:
search_start
=
find_search_start
(
root
,
&
block_group
,
search_start
,
search_start
=
find_search_start
(
root
,
&
block_group
,
search_start
,
total_needed
,
data
,
full_scan
);
total_needed
,
data
,
full_scan
);
search_start
=
stripe_align
(
root
,
search_start
);
cached_start
=
search_start
;
cached_start
=
search_start
;
btrfs_init_path
(
path
);
btrfs_init_path
(
path
);
ins
->
objectid
=
search_start
;
ins
->
objectid
=
search_start
;
...
@@ -1039,13 +1048,23 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
...
@@ -1039,13 +1048,23 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
search_start
=
max
(
search_start
,
search_start
=
max
(
search_start
,
block_group
->
key
.
objectid
);
block_group
->
key
.
objectid
);
if
(
!
start_found
)
{
if
(
!
start_found
)
{
ins
->
objectid
=
search_start
;
aligned
=
stripe_align
(
root
,
search_start
);
ins
->
offset
=
search_end
-
search_start
;
ins
->
objectid
=
aligned
;
if
(
aligned
>=
search_end
)
{
ret
=
-
ENOSPC
;
goto
error
;
}
ins
->
offset
=
search_end
-
aligned
;
start_found
=
1
;
start_found
=
1
;
goto
check_pending
;
goto
check_pending
;
}
}
ins
->
objectid
=
last_byte
>
search_start
?
ins
->
objectid
=
stripe_align
(
root
,
last_byte
:
search_start
;
last_byte
>
search_start
?
last_byte
:
search_start
);
if
(
search_end
<=
ins
->
objectid
)
{
ret
=
-
ENOSPC
;
goto
error
;
}
ins
->
offset
=
search_end
-
ins
->
objectid
;
ins
->
offset
=
search_end
-
ins
->
objectid
;
BUG_ON
(
ins
->
objectid
>=
search_end
);
BUG_ON
(
ins
->
objectid
>=
search_end
);
goto
check_pending
;
goto
check_pending
;
...
@@ -1056,9 +1075,10 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
...
@@ -1056,9 +1075,10 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
start_found
)
{
start_found
)
{
if
(
last_byte
<
search_start
)
if
(
last_byte
<
search_start
)
last_byte
=
search_start
;
last_byte
=
search_start
;
hole_size
=
key
.
objectid
-
last_byte
;
aligned
=
stripe_align
(
root
,
last_byte
);
if
(
hole_size
>=
num_bytes
)
{
hole_size
=
key
.
objectid
-
aligned
;
ins
->
objectid
=
last_byte
;
if
(
key
.
objectid
>
aligned
&&
hole_size
>=
num_bytes
)
{
ins
->
objectid
=
aligned
;
ins
->
offset
=
hole_size
;
ins
->
offset
=
hole_size
;
goto
check_pending
;
goto
check_pending
;
}
}
...
...
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