From: Filipe David Borba Manana <fdmanana@gmail.com>
To: linux-btrfs@vger.kernel.org
Cc: Filipe David Borba Manana <fdmanana@gmail.com>
Subject: [PATCH v3] Btrfs-progs: fix optimization in btrfs_lookup_extent_info
Date: Fri, 5 Jul 2013 21:36:46 +0100 [thread overview]
Message-ID: <1373056606-897-1-git-send-email-fdmanana@gmail.com> (raw)
In-Reply-To: <1372952919-21010-1-git-send-email-fdmanana@gmail.com>
If we did a tree search with the goal to find a metadata item
but the search failed with return value 1, we attempt to see
if in the same leaf there's a corresponding extent item, and if
there's one, just use it instead of doing another tree search
for this extent item. The check in the leaf was wrong because
it was seeking for a metadata item instead of an extent item.
This optimization was also being triggered incorrectly, as it
was evaluating path->slots which always evaluates to true. The
goal was to see if the leaf level slot was greater than zero
(i.e. not the first item in the leaf).
V2: If previous leaf item is for a different object, ensure the
search key has the target object id.
V3: Added Josef Bacik's review mention.
Reviewed-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
---
extent-tree.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/extent-tree.c b/extent-tree.c
index b0cfe0a..875dea9 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -1515,17 +1515,19 @@ again:
* to make sure.
*/
if (ret > 0 && metadata) {
- if (path->slots) {
+ if (path->slots[0]) {
path->slots[0]--;
btrfs_item_key_to_cpu(path->nodes[0], &key,
path->slots[0]);
if (key.objectid == bytenr &&
- key.type == BTRFS_METADATA_ITEM_KEY)
+ key.type == BTRFS_EXTENT_ITEM_KEY &&
+ key.offset == root->leafsize)
ret = 0;
}
if (ret) {
btrfs_release_path(root, path);
+ key.objectid = bytenr;
key.type = BTRFS_EXTENT_ITEM_KEY;
key.offset = root->leafsize;
metadata = 0;
--
1.7.9.5
prev parent reply other threads:[~2013-07-05 20:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-03 16:32 [PATCH] Btrfs-progs: fix check in btrfs_lookup_extent_info() Filipe David Borba Manana
2013-07-04 15:48 ` [PATCH] Btrfs-progs: fix optimization in btrfs_lookup_extent_info Filipe David Borba Manana
2013-07-04 15:55 ` Filipe David Manana
2013-07-04 16:24 ` [PATCH v2] " Filipe David Borba Manana
2013-07-05 20:29 ` Josef Bacik
2013-07-05 20:36 ` Filipe David Borba Manana [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1373056606-897-1-git-send-email-fdmanana@gmail.com \
--to=fdmanana@gmail.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).