summaryrefslogtreecommitdiff
path: root/cmds-receive.c
diff options
context:
space:
mode:
authorChristian Brauner <christian.brauner@ubuntu.com>2017-04-29 23:54:05 +0200
committerDavid Sterba <dsterba@suse.com>2017-05-15 16:23:14 +0200
commit9845d93bb2f158fa2f48e45b0e02e13ad6be6677 (patch)
tree37fed067f1f5c1be0ba53542a195f97bb6d7e9ad /cmds-receive.c
parentf8c82394c4f9075ff8e006606b309f67281fa771 (diff)
btrfs-progs: receiv: fail on first -ENODATA only
Returning -ENODATA is only considered invalid on the first run of the loop where we would detect entirely empty stream. The enhanced test misc-tests/018-recv-end-of-stream now passes. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=195597 Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-receive.c')
-rw-r--r--cmds-receive.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/cmds-receive.c b/cmds-receive.c
index b59f00e4..72e9c8f3 100644
--- a/cmds-receive.c
+++ b/cmds-receive.c
@@ -1091,6 +1091,7 @@ static int do_receive(struct btrfs_receive *rctx, const char *tomnt,
char *dest_dir_full_path;
char root_subvol_path[PATH_MAX];
int end = 0;
+ int iterations = 0;
dest_dir_full_path = realpath(tomnt, NULL);
if (!dest_dir_full_path) {
@@ -1198,13 +1199,18 @@ static int do_receive(struct btrfs_receive *rctx, const char *tomnt,
rctx,
rctx->honor_end_cmd,
max_errors);
- if (ret < 0 && ret == -ENODATA) {
+ if (ret < 0) {
+ if (ret != -ENODATA)
+ goto out;
+
/* Empty stream is invalid */
- error("empty stream is not considered valid");
- ret = -EINVAL;
- goto out;
- } else if (ret < 0) {
- goto out;
+ if (iterations == 0) {
+ error("empty stream is not considered valid");
+ ret = -EINVAL;
+ goto out;
+ }
+
+ ret = 1;
}
if (ret > 0)
end = 1;
@@ -1213,6 +1219,8 @@ static int do_receive(struct btrfs_receive *rctx, const char *tomnt,
ret = finish_subvol(rctx);
if (ret < 0)
goto out;
+
+ iterations++;
}
ret = 0;