* [PATCH 0/2] Remove duplicated and useless code in cmds-restore
@ 2013-07-09 18:49 Filipe David Borba Manana
2013-07-09 18:49 ` [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c Filipe David Borba Manana
2013-07-09 18:49 ` [PATCH 2/2] Btrfs-progs: remove unneeded leaf checks in cmds-restore Filipe David Borba Manana
0 siblings, 2 replies; 7+ messages in thread
From: Filipe David Borba Manana @ 2013-07-09 18:49 UTC (permalink / raw)
To: linux-btrfs; +Cc: Filipe David Borba Manana
The following patch series are just a cleanup for cmds-restore.c,
removing some duplicated code and code that never gets executed.
Filipe David Borba Manana (2):
Btrfs-progs: remove duplicated code in cmds-restore.c
Btrfs-progs: remove unneeded leaf checks in cmds-restore
cmds-restore.c | 170 ++++++++++++--------------------------------------------
1 file changed, 37 insertions(+), 133 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c
2013-07-09 18:49 [PATCH 0/2] Remove duplicated and useless code in cmds-restore Filipe David Borba Manana
@ 2013-07-09 18:49 ` Filipe David Borba Manana
2013-07-10 16:12 ` David Sterba
2013-07-09 18:49 ` [PATCH 2/2] Btrfs-progs: remove unneeded leaf checks in cmds-restore Filipe David Borba Manana
1 sibling, 1 reply; 7+ messages in thread
From: Filipe David Borba Manana @ 2013-07-09 18:49 UTC (permalink / raw)
To: linux-btrfs; +Cc: Filipe David Borba Manana
The module cmds-restore.c was defining its own next_leaf()
function, which did exactly the same as btrfs_next_leaf()
from ctree.c.
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
---
cmds-restore.c | 62 +++++---------------------------------------------------
1 file changed, 5 insertions(+), 57 deletions(-)
diff --git a/cmds-restore.c b/cmds-restore.c
index eca528d..ed4815a 100644
--- a/cmds-restore.c
+++ b/cmds-restore.c
@@ -148,58 +148,6 @@ static int decompress(char *inbuf, char *outbuf, u64 compress_len,
return -1;
}
-int next_leaf(struct btrfs_root *root, struct btrfs_path *path)
-{
- int slot;
- int level = 1;
- struct extent_buffer *c;
- struct extent_buffer *next = NULL;
-
- for (; level < BTRFS_MAX_LEVEL; level++) {
- if (path->nodes[level])
- break;
- }
-
- if (level == BTRFS_MAX_LEVEL)
- return 1;
-
- slot = path->slots[level] + 1;
-
- while(level < BTRFS_MAX_LEVEL) {
- if (!path->nodes[level])
- return 1;
-
- slot = path->slots[level] + 1;
- c = path->nodes[level];
- if (slot >= btrfs_header_nritems(c)) {
- level++;
- if (level == BTRFS_MAX_LEVEL)
- return 1;
- continue;
- }
-
- if (path->reada)
- reada_for_search(root, path, level, slot, 0);
-
- next = read_node_slot(root, c, slot);
- break;
- }
- path->slots[level] = slot;
- while(1) {
- level--;
- c = path->nodes[level];
- free_extent_buffer(c);
- path->nodes[level] = next;
- path->slots[level] = 0;
- if (!level)
- break;
- if (path->reada)
- reada_for_search(root, path, level, 0, 0);
- next = read_node_slot(root, next, 0);
- }
- return 0;
-}
-
static int copy_one_inline(int fd, struct btrfs_path *path, u64 pos)
{
struct extent_buffer *leaf = path->nodes[0];
@@ -447,7 +395,7 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key,
leaf = path->nodes[0];
while (!leaf) {
- ret = next_leaf(root, path);
+ ret = btrfs_next_leaf(root, path);
if (ret < 0) {
fprintf(stderr, "Error getting next leaf %d\n",
ret);
@@ -470,7 +418,7 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key,
}
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
do {
- ret = next_leaf(root, path);
+ ret = btrfs_next_leaf(root, path);
if (ret < 0) {
fprintf(stderr, "Error searching %d\n", ret);
btrfs_free_path(path);
@@ -569,7 +517,7 @@ static int search_dir(struct btrfs_root *root, struct btrfs_key *key,
if (verbose > 1)
printf("No leaf after search, looking for the next "
"leaf\n");
- ret = next_leaf(root, path);
+ ret = btrfs_next_leaf(root, path);
if (ret < 0) {
fprintf(stderr, "Error getting next leaf %d\n",
ret);
@@ -596,7 +544,7 @@ static int search_dir(struct btrfs_root *root, struct btrfs_key *key,
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
do {
- ret = next_leaf(root, path);
+ ret = btrfs_next_leaf(root, path);
if (ret < 0) {
fprintf(stderr, "Error searching %d\n",
ret);
@@ -937,7 +885,7 @@ again:
goto out;
}
do {
- ret = next_leaf(root, path);
+ ret = btrfs_next_leaf(root, path);
if (ret < 0) {
fprintf(stderr, "Error getting next leaf %d\n",
ret);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] Btrfs-progs: remove unneeded leaf checks in cmds-restore
2013-07-09 18:49 [PATCH 0/2] Remove duplicated and useless code in cmds-restore Filipe David Borba Manana
2013-07-09 18:49 ` [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c Filipe David Borba Manana
@ 2013-07-09 18:49 ` Filipe David Borba Manana
1 sibling, 0 replies; 7+ messages in thread
From: Filipe David Borba Manana @ 2013-07-09 18:49 UTC (permalink / raw)
To: linux-btrfs; +Cc: Filipe David Borba Manana
If btrfs_search_slot() returns a value >= 0, then we can be
sure that path->nodes[i] is not NULL for each i between 0 to
tree height - 1. The function btrfs_next_leaf() also ensures
any path->nodes[i] is not NULL as long as it returns 0.
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
---
cmds-restore.c | 118 ++++++++++++++++++--------------------------------------
1 file changed, 37 insertions(+), 81 deletions(-)
diff --git a/cmds-restore.c b/cmds-restore.c
index ed4815a..baa9cab 100644
--- a/cmds-restore.c
+++ b/cmds-restore.c
@@ -394,21 +394,6 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key,
}
leaf = path->nodes[0];
- while (!leaf) {
- ret = btrfs_next_leaf(root, path);
- if (ret < 0) {
- fprintf(stderr, "Error getting next leaf %d\n",
- ret);
- btrfs_free_path(path);
- return ret;
- } else if (ret > 0) {
- /* No more leaves to search */
- btrfs_free_path(path);
- return 0;
- }
- leaf = path->nodes[0];
- }
-
while (1) {
if (loops++ >= 1024) {
ret = ask_to_continue(file);
@@ -417,19 +402,17 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key,
loops = 0;
}
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
- do {
- ret = btrfs_next_leaf(root, path);
- if (ret < 0) {
- fprintf(stderr, "Error searching %d\n", ret);
- btrfs_free_path(path);
- return ret;
- } else if (ret) {
- /* No more leaves to search */
- btrfs_free_path(path);
- goto set_size;
- }
- leaf = path->nodes[0];
- } while (!leaf);
+ ret = btrfs_next_leaf(root, path);
+ if (ret < 0) {
+ fprintf(stderr, "Error searching %d\n", ret);
+ btrfs_free_path(path);
+ return ret;
+ } else if (ret) {
+ /* No more leaves to search */
+ btrfs_free_path(path);
+ goto set_size;
+ }
+ leaf = path->nodes[0];
continue;
}
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
@@ -513,27 +496,6 @@ static int search_dir(struct btrfs_root *root, struct btrfs_key *key,
}
leaf = path->nodes[0];
- while (!leaf) {
- if (verbose > 1)
- printf("No leaf after search, looking for the next "
- "leaf\n");
- ret = btrfs_next_leaf(root, path);
- if (ret < 0) {
- fprintf(stderr, "Error getting next leaf %d\n",
- ret);
- btrfs_free_path(path);
- return ret;
- } else if (ret > 0) {
- /* No more leaves to search */
- if (verbose)
- printf("Reached the end of the tree looking "
- "for the directory\n");
- btrfs_free_path(path);
- return 0;
- }
- leaf = path->nodes[0];
- }
-
while (leaf) {
if (loops++ >= 1024) {
printf("We have looped trying to restore files in %s "
@@ -543,24 +505,22 @@ static int search_dir(struct btrfs_root *root, struct btrfs_key *key,
}
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
- do {
- ret = btrfs_next_leaf(root, path);
- if (ret < 0) {
- fprintf(stderr, "Error searching %d\n",
- ret);
- btrfs_free_path(path);
- return ret;
- } else if (ret > 0) {
- /* No more leaves to search */
- if (verbose)
- printf("Reached the end of "
- "the tree searching the"
- " directory\n");
- btrfs_free_path(path);
- return 0;
- }
- leaf = path->nodes[0];
- } while (!leaf);
+ ret = btrfs_next_leaf(root, path);
+ if (ret < 0) {
+ fprintf(stderr, "Error searching %d\n",
+ ret);
+ btrfs_free_path(path);
+ return ret;
+ } else if (ret > 0) {
+ /* No more leaves to search */
+ if (verbose)
+ printf("Reached the end of "
+ "the tree searching the"
+ " directory\n");
+ btrfs_free_path(path);
+ return 0;
+ }
+ leaf = path->nodes[0];
continue;
}
btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
@@ -884,20 +844,16 @@ again:
ret = 0;
goto out;
}
- do {
- ret = btrfs_next_leaf(root, path);
- if (ret < 0) {
- fprintf(stderr, "Error getting next leaf %d\n",
- ret);
- goto out;
- } else if (ret > 0) {
- fprintf(stderr, "No more leaves\n");
- goto out;
- }
- } while (!path->nodes[0]);
- if (path->nodes[0])
- goto again;
- printf("Couldn't find a dir index item\n");
+ ret = btrfs_next_leaf(root, path);
+ if (ret < 0) {
+ fprintf(stderr, "Error getting next leaf %d\n",
+ ret);
+ goto out;
+ } else if (ret > 0) {
+ fprintf(stderr, "No more leaves\n");
+ goto out;
+ }
+ goto again;
out:
btrfs_free_path(path);
return ret;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c
2013-07-09 18:49 ` [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c Filipe David Borba Manana
@ 2013-07-10 16:12 ` David Sterba
2013-07-10 16:21 ` Filipe David Manana
2013-08-03 0:34 ` Eric Sandeen
0 siblings, 2 replies; 7+ messages in thread
From: David Sterba @ 2013-07-10 16:12 UTC (permalink / raw)
To: Filipe David Borba Manana; +Cc: linux-btrfs
On Tue, Jul 09, 2013 at 07:49:53PM +0100, Filipe David Borba Manana wrote:
> The module cmds-restore.c was defining its own next_leaf()
> function, which did exactly the same as btrfs_next_leaf()
> from ctree.c.
This has been removed by Eric's patch present in the integration
branches:
Btrfs-progs: remove cut & paste btrfs_next_leaf from restore
http://www.spinics.net/lists/linux-btrfs/msg24477.html
but now Chris has a fix in the master branch,
btrfs-restore: deal with NULL returns from read_node_slot
https://git.kernel.org/cgit/linux/kernel/git/mason/btrfs-progs.git/commit/?id=194aa4a1bd6447bb545286d0bcb0b0be8204d79f
the code of updated next_leaf is not identical to btrfs_next_leaf and I
think 'restore' could be more tolerant to partially corrupted
structures, so both functions could make sense in the end.
david
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c
2013-07-10 16:12 ` David Sterba
@ 2013-07-10 16:21 ` Filipe David Manana
2013-08-03 0:34 ` Eric Sandeen
1 sibling, 0 replies; 7+ messages in thread
From: Filipe David Manana @ 2013-07-10 16:21 UTC (permalink / raw)
To: dsterba@suse.cz, Filipe David Borba Manana,
linux-btrfs@vger.kernel.org
On Wed, Jul 10, 2013 at 5:12 PM, David Sterba <dsterba@suse.cz> wrote:
> On Tue, Jul 09, 2013 at 07:49:53PM +0100, Filipe David Borba Manana wrote:
>> The module cmds-restore.c was defining its own next_leaf()
>> function, which did exactly the same as btrfs_next_leaf()
>> from ctree.c.
>
> This has been removed by Eric's patch present in the integration
> branches:
> Btrfs-progs: remove cut & paste btrfs_next_leaf from restore
> http://www.spinics.net/lists/linux-btrfs/msg24477.html
Oh, didn't notice that.
>
> but now Chris has a fix in the master branch,
> btrfs-restore: deal with NULL returns from read_node_slot
> https://git.kernel.org/cgit/linux/kernel/git/mason/btrfs-progs.git/commit/?id=194aa4a1bd6447bb545286d0bcb0b0be8204d79f
>
> the code of updated next_leaf is not identical to btrfs_next_leaf and I
> think 'restore' could be more tolerant to partially corrupted
> structures, so both functions could make sense in the end.
Ok, I understand now why both exist.
So please just ignore this patch and the following one
(https://patchwork.kernel.org/patch/2825425/).
thanks
>
> david
--
Filipe David Manana,
"Reasonable men adapt themselves to the world.
Unreasonable men adapt the world to themselves.
That's why all progress depends on unreasonable men."
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c
2013-07-10 16:12 ` David Sterba
2013-07-10 16:21 ` Filipe David Manana
@ 2013-08-03 0:34 ` Eric Sandeen
2013-08-03 21:36 ` Eric Sandeen
1 sibling, 1 reply; 7+ messages in thread
From: Eric Sandeen @ 2013-08-03 0:34 UTC (permalink / raw)
To: dsterba, Filipe David Borba Manana, linux-btrfs, Chris Mason
On 7/10/13 11:12 AM, David Sterba wrote:
> On Tue, Jul 09, 2013 at 07:49:53PM +0100, Filipe David Borba Manana wrote:
>> The module cmds-restore.c was defining its own next_leaf()
>> function, which did exactly the same as btrfs_next_leaf()
>> from ctree.c.
>
> This has been removed by Eric's patch present in the integration
> branches:
> Btrfs-progs: remove cut & paste btrfs_next_leaf from restore
> http://www.spinics.net/lists/linux-btrfs/msg24477.html
>
> but now Chris has a fix in the master branch,
> btrfs-restore: deal with NULL returns from read_node_slot
> https://git.kernel.org/cgit/linux/kernel/git/mason/btrfs-progs.git/commit/?id=194aa4a1bd6447bb545286d0bcb0b0be8204d79f
Just noticed this. :(
Is there some reason that kernelspace should not also get Chris' fix, though?
> the code of updated next_leaf is not identical to btrfs_next_leaf and I
> think 'restore' could be more tolerant to partially corrupted
> structures, so both functions could make sense in the end.
Surely kernelspace should be at least as tolerant as userspace; it
it seems like Chris's BUG_ON removal patch could benefit kernelspace too, no?
And then we could take one more baby step towards a cleaner, non-
cut-and-pasted codebase.
-Eric
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c
2013-08-03 0:34 ` Eric Sandeen
@ 2013-08-03 21:36 ` Eric Sandeen
0 siblings, 0 replies; 7+ messages in thread
From: Eric Sandeen @ 2013-08-03 21:36 UTC (permalink / raw)
To: dsterba, Filipe David Borba Manana, linux-btrfs, Chris Mason
On 8/2/13 7:34 PM, Eric Sandeen wrote:
> On 7/10/13 11:12 AM, David Sterba wrote:
>> On Tue, Jul 09, 2013 at 07:49:53PM +0100, Filipe David Borba Manana wrote:
>>> The module cmds-restore.c was defining its own next_leaf()
>>> function, which did exactly the same as btrfs_next_leaf()
>>> from ctree.c.
>>
>> This has been removed by Eric's patch present in the integration
>> branches:
>> Btrfs-progs: remove cut & paste btrfs_next_leaf from restore
>> http://www.spinics.net/lists/linux-btrfs/msg24477.html
>>
>> but now Chris has a fix in the master branch,
>> btrfs-restore: deal with NULL returns from read_node_slot
>> https://git.kernel.org/cgit/linux/kernel/git/mason/btrfs-progs.git/commit/?id=194aa4a1bd6447bb545286d0bcb0b0be8204d79f
>
> Just noticed this. :(
>
> Is there some reason that kernelspace should not also get Chris' fix, though?
Or for that matter the other copy in ctree.c...
Ok, my email didn't make a ton of sense. :/ But there are basically 3 copies
of this function now, diverging further - in btrfs-progs' ctree.c and cmds-restore.c,
as well as kernelspace ctree.c Should they differ?
Now that I have some time I guess I'll get back to trying to bring userspace
in line w/ kernelspace again...
-Eric
>> the code of updated next_leaf is not identical to btrfs_next_leaf and I
>> think 'restore' could be more tolerant to partially corrupted
>> structures, so both functions could make sense in the end.
>
> Surely kernelspace should be at least as tolerant as userspace; it
> it seems like Chris's BUG_ON removal patch could benefit kernelspace too, no?
>
> And then we could take one more baby step towards a cleaner, non-
> cut-and-pasted codebase.
>
> -Eric
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-08-03 21:37 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-09 18:49 [PATCH 0/2] Remove duplicated and useless code in cmds-restore Filipe David Borba Manana
2013-07-09 18:49 ` [PATCH 1/2] Btrfs-progs: remove duplicated code in cmds-restore.c Filipe David Borba Manana
2013-07-10 16:12 ` David Sterba
2013-07-10 16:21 ` Filipe David Manana
2013-08-03 0:34 ` Eric Sandeen
2013-08-03 21:36 ` Eric Sandeen
2013-07-09 18:49 ` [PATCH 2/2] Btrfs-progs: remove unneeded leaf checks in cmds-restore Filipe David Borba Manana
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.