forked from Mirrors/btrfs-progs
btrfs-progs: send-stream: track the read position in the stream
Can be later used for more precise error reporting. Signed-off-by: David Sterba <dsterba@suse.com>master
parent
691d1ac8fa
commit
bb2c0e23d8
|
@ -33,6 +33,12 @@ struct btrfs_send_stream {
|
||||||
struct btrfs_tlv_header *cmd_attrs[BTRFS_SEND_A_MAX + 1];
|
struct btrfs_tlv_header *cmd_attrs[BTRFS_SEND_A_MAX + 1];
|
||||||
u32 version;
|
u32 version;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* end of last successful read, equivalent to start of current
|
||||||
|
* malformated part of block
|
||||||
|
*/
|
||||||
|
size_t stream_pos;
|
||||||
|
|
||||||
struct btrfs_send_ops *ops;
|
struct btrfs_send_ops *ops;
|
||||||
void *user;
|
void *user;
|
||||||
};
|
};
|
||||||
|
@ -71,6 +77,8 @@ out_eof:
|
||||||
if (pos < len) {
|
if (pos < len) {
|
||||||
error("short read from stream: expected %zu read %zu", len, pos);
|
error("short read from stream: expected %zu read %zu", len, pos);
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
|
} else {
|
||||||
|
sctx->stream_pos += pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -478,6 +486,7 @@ int btrfs_read_and_process_send_stream(int fd,
|
||||||
sctx.fd = fd;
|
sctx.fd = fd;
|
||||||
sctx.ops = ops;
|
sctx.ops = ops;
|
||||||
sctx.user = user;
|
sctx.user = user;
|
||||||
|
sctx.stream_pos = 0;
|
||||||
|
|
||||||
ret = read_buf(&sctx, (char*)&hdr, sizeof(hdr));
|
ret = read_buf(&sctx, (char*)&hdr, sizeof(hdr));
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
Loading…
Reference in New Issue