[12/18] btrfs restore: check progress of file restoration
diff mbox

Message ID 1418244708-7087-13-git-send-email-mwilck@arcor.de
State New, archived
Headers show

Commit Message

mwilck@arcor.de Dec. 10, 2014, 8:51 p.m. UTC
From: Martin Wilck <mwilck@arcor.de>

extents should be ordered by file offset. Expect no overlaps,
and report holes.

Signed-off-by: Martin Wilck <mwilck@arcor.de>
---
 cmds-restore.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

Comments

Qu Wenruo Dec. 11, 2014, 8:44 a.m. UTC | #1
-------- Original Message --------
Subject: [PATCH 12/18] btrfs restore: check progress of file restoration
From: <mwilck@arcor.de>
To: <linux-btrfs@vger.kernel.org>
Date: 2014?12?11? 04:51
> From: Martin Wilck <mwilck@arcor.de>
>
> extents should be ordered by file offset. Expect no overlaps,
> and report holes.
>
> Signed-off-by: Martin Wilck <mwilck@arcor.de>
> ---
>   cmds-restore.c |    8 ++++++++
>   1 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/cmds-restore.c b/cmds-restore.c
> index 004c82e..80081b8 100644
> --- a/cmds-restore.c
> +++ b/cmds-restore.c
> @@ -739,6 +739,14 @@ static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key,
>   			ret = -1;
>   			goto set_size;
>   		}
> +		if (found_key.offset < next_pos) {
> +			fprintf(stderr, "extent overlap, %llu < %llu\n",
> +				found_key.offset, next_pos);
> +			ret = -1;
> +			goto set_size;
Would it be better to continue recovery?
Even overlap, later extents may still be OK. What about just skip to 
next extent?

Thanks,
Qu
> +		} else if (found_key.offset > next_pos)
> +			fprintf(stderr, "hole at %llu (%llu bytes)\n",
> +				next_pos, found_key.offset - next_pos);
>   
>   		bytes_written = 0ULL;
>   		if (extent_type == BTRFS_FILE_EXTENT_PREALLOC)

--
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

Patch
diff mbox

diff --git a/cmds-restore.c b/cmds-restore.c
index 004c82e..80081b8 100644
--- a/cmds-restore.c
+++ b/cmds-restore.c
@@ -739,6 +739,14 @@  static int copy_file(struct btrfs_root *root, int fd, struct btrfs_key *key,
 			ret = -1;
 			goto set_size;
 		}
+		if (found_key.offset < next_pos) {
+			fprintf(stderr, "extent overlap, %llu < %llu\n",
+				found_key.offset, next_pos);
+			ret = -1;
+			goto set_size;
+		} else if (found_key.offset > next_pos)
+			fprintf(stderr, "hole at %llu (%llu bytes)\n",
+				next_pos, found_key.offset - next_pos);
 
 		bytes_written = 0ULL;
 		if (extent_type == BTRFS_FILE_EXTENT_PREALLOC)