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
8d7be552
Commit
8d7be552
authored
May 10, 2007
by
Chris Mason
Committed by
David Woodhouse
May 10, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Btrfs: fix check_node and check_leaf to use less cpu
Signed-off-by:
Chris Mason
<
chris.mason@oracle.com
>
parent
e37c9e69
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
21 deletions
+29
-21
fs/btrfs/ctree.c
fs/btrfs/ctree.c
+26
-18
fs/btrfs/extent-tree.c
fs/btrfs/extent-tree.c
+3
-3
No files found.
fs/btrfs/ctree.c
View file @
8d7be552
...
...
@@ -130,15 +130,17 @@ static int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2)
static
int
check_node
(
struct
btrfs_root
*
root
,
struct
btrfs_path
*
path
,
int
level
)
{
int
i
;
struct
btrfs_node
*
parent
=
NULL
;
struct
btrfs_node
*
node
=
btrfs_buffer_node
(
path
->
nodes
[
level
]);
int
parent_slot
;
int
slot
;
struct
btrfs_key
cpukey
;
u32
nritems
=
btrfs_header_nritems
(
&
node
->
header
);
if
(
path
->
nodes
[
level
+
1
])
parent
=
btrfs_buffer_node
(
path
->
nodes
[
level
+
1
]);
parent_slot
=
path
->
slots
[
level
+
1
];
slot
=
path
->
slots
[
level
];
BUG_ON
(
nritems
==
0
);
if
(
parent
)
{
struct
btrfs_disk_key
*
parent_key
;
...
...
@@ -149,10 +151,13 @@ static int check_node(struct btrfs_root *root, struct btrfs_path *path,
btrfs_header_blocknr
(
&
node
->
header
));
}
BUG_ON
(
nritems
>
BTRFS_NODEPTRS_PER_BLOCK
(
root
));
for
(
i
=
0
;
nritems
>
1
&&
i
<
nritems
-
2
;
i
++
)
{
struct
btrfs_key
cpukey
;
btrfs_disk_key_to_cpu
(
&
cpukey
,
&
node
->
ptrs
[
i
+
1
].
key
);
BUG_ON
(
comp_keys
(
&
node
->
ptrs
[
i
].
key
,
&
cpukey
)
>=
0
);
if
(
slot
!=
0
)
{
btrfs_disk_key_to_cpu
(
&
cpukey
,
&
node
->
ptrs
[
slot
-
1
].
key
);
BUG_ON
(
comp_keys
(
&
node
->
ptrs
[
slot
].
key
,
&
cpukey
)
<=
0
);
}
if
(
slot
<
nritems
-
1
)
{
btrfs_disk_key_to_cpu
(
&
cpukey
,
&
node
->
ptrs
[
slot
+
1
].
key
);
BUG_ON
(
comp_keys
(
&
node
->
ptrs
[
slot
].
key
,
&
cpukey
)
>=
0
);
}
return
0
;
}
...
...
@@ -160,10 +165,12 @@ static int check_node(struct btrfs_root *root, struct btrfs_path *path,
static
int
check_leaf
(
struct
btrfs_root
*
root
,
struct
btrfs_path
*
path
,
int
level
)
{
int
i
;
struct
btrfs_leaf
*
leaf
=
btrfs_buffer_leaf
(
path
->
nodes
[
level
]);
struct
btrfs_node
*
parent
=
NULL
;
int
parent_slot
;
int
slot
=
path
->
slots
[
0
];
struct
btrfs_key
cpukey
;
u32
nritems
=
btrfs_header_nritems
(
&
leaf
->
header
);
if
(
path
->
nodes
[
level
+
1
])
...
...
@@ -182,19 +189,20 @@ static int check_leaf(struct btrfs_root *root, struct btrfs_path *path,
BUG_ON
(
btrfs_node_blockptr
(
parent
,
parent_slot
)
!=
btrfs_header_blocknr
(
&
leaf
->
header
));
}
for
(
i
=
0
;
nritems
>
1
&&
i
<
nritems
-
2
;
i
++
)
{
struct
btrfs_key
cpukey
;
btrfs_disk_key_to_cpu
(
&
cpukey
,
&
leaf
->
items
[
i
+
1
].
key
);
BUG_ON
(
comp_keys
(
&
leaf
->
items
[
i
].
key
,
&
cpukey
)
>=
0
);
BUG_ON
(
btrfs_item_offset
(
leaf
->
items
+
i
)
!=
btrfs_item_end
(
leaf
->
items
+
i
+
1
));
if
(
i
==
0
)
{
BUG_ON
(
btrfs_item_offset
(
leaf
->
items
+
i
)
+
btrfs_item_size
(
leaf
->
items
+
i
)
!=
BTRFS_LEAF_DATA_SIZE
(
root
));
}
if
(
slot
!=
0
)
{
btrfs_disk_key_to_cpu
(
&
cpukey
,
&
leaf
->
items
[
slot
-
1
].
key
);
BUG_ON
(
comp_keys
(
&
leaf
->
items
[
slot
].
key
,
&
cpukey
)
<=
0
);
BUG_ON
(
btrfs_item_offset
(
leaf
->
items
+
slot
-
1
)
!=
btrfs_item_end
(
leaf
->
items
+
slot
));
}
if
(
slot
<
nritems
-
1
)
{
btrfs_disk_key_to_cpu
(
&
cpukey
,
&
leaf
->
items
[
slot
+
1
].
key
);
BUG_ON
(
comp_keys
(
&
leaf
->
items
[
slot
].
key
,
&
cpukey
)
>=
0
);
BUG_ON
(
btrfs_item_offset
(
leaf
->
items
+
slot
)
!=
btrfs_item_end
(
leaf
->
items
+
slot
+
1
));
}
BUG_ON
(
btrfs_item_offset
(
leaf
->
items
)
+
btrfs_item_size
(
leaf
->
items
)
!=
BTRFS_LEAF_DATA_SIZE
(
root
));
return
0
;
}
...
...
fs/btrfs/extent-tree.c
View file @
8d7be552
...
...
@@ -235,7 +235,7 @@ struct btrfs_block_group_cache *btrfs_find_block_group(struct btrfs_root *root,
hint
->
key
.
offset
-
1
,
BTRFS_BLOCK_GROUP_AVAIL
);
}
last
=
hint
->
key
.
offset
*
2
;
last
=
hint
->
key
.
offset
*
3
;
if
(
hint
->
key
.
objectid
>=
last
)
last
=
max
(
search_start
+
hint
->
key
.
offset
-
1
,
hint
->
key
.
objectid
-
last
);
...
...
@@ -554,8 +554,8 @@ static int update_block_group(struct btrfs_trans_handle *trans,
blocknr
+
i
);
}
}
if
(
old_val
<
(
cache
->
key
.
offset
*
8
)
/
10
&&
old_val
+
num
>=
(
cache
->
key
.
offset
*
8
)
/
10
)
{
if
(
old_val
<
(
cache
->
key
.
offset
*
6
)
/
10
&&
old_val
+
num
>=
(
cache
->
key
.
offset
*
6
)
/
10
)
{
printk
(
"group %Lu now available
\n
"
,
cache
->
key
.
objectid
);
radix_tree_tag_set
(
cache
->
radix
,
cache
->
key
.
objectid
+
...
...
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