diff options
author | Christian Brauner <christian.brauner@ubuntu.com> | 2017-04-29 23:54:05 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-05-15 16:23:14 +0200 |
commit | 9845d93bb2f158fa2f48e45b0e02e13ad6be6677 (patch) | |
tree | 37fed067f1f5c1be0ba53542a195f97bb6d7e9ad /cmds-receive.c | |
parent | f8c82394c4f9075ff8e006606b309f67281fa771 (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.c | 20 |
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; |