mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-24 23:22:27 +00:00
909131939f
Due to either bugs in send (kernel) that generate a command against a wrong path for example, or transient errors on the receiving side, we stopped processing the send stream immediately and exited with an error. It's often desirable to continue processing the send stream even if an error happens while processing a single command from the send stream. This change just adds a --max-errors <N> parameter, whose default value is 1 (preserving current behaviour), that allows to tolerate N errors before stopping. A value of 0 means to never stop no matter how many errors we get into while processing the send stream. Regardless of its value, errors are always printed to stderr when they happen, just like before this change. Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com> Signed-off-by: David Sterba <dsterba@suse.cz>
69 lines
2.5 KiB
C
69 lines
2.5 KiB
C
/*
|
|
* Copyright (C) 2012 Alexander Block. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public
|
|
* License v2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public
|
|
* License along with this program; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 021110-1307, USA.
|
|
*/
|
|
#ifndef SEND_STREAM_H_
|
|
#define SEND_STREAM_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct btrfs_send_ops {
|
|
int (*subvol)(const char *path, const u8 *uuid, u64 ctransid,
|
|
void *user);
|
|
int (*snapshot)(const char *path, const u8 *uuid, u64 ctransid,
|
|
const u8 *parent_uuid, u64 parent_ctransid,
|
|
void *user);
|
|
int (*mkfile)(const char *path, void *user);
|
|
int (*mkdir)(const char *path, void *user);
|
|
int (*mknod)(const char *path, u64 mode, u64 dev, void *user);
|
|
int (*mkfifo)(const char *path, void *user);
|
|
int (*mksock)(const char *path, void *user);
|
|
int (*symlink)(const char *path, const char *lnk, void *user);
|
|
int (*rename)(const char *from, const char *to, void *user);
|
|
int (*link)(const char *path, const char *lnk, void *user);
|
|
int (*unlink)(const char *path, void *user);
|
|
int (*rmdir)(const char *path, void *user);
|
|
int (*write)(const char *path, const void *data, u64 offset, u64 len,
|
|
void *user);
|
|
int (*clone)(const char *path, u64 offset, u64 len,
|
|
const u8 *clone_uuid, u64 clone_ctransid,
|
|
const char *clone_path, u64 clone_offset,
|
|
void *user);
|
|
int (*set_xattr)(const char *path, const char *name, const void *data,
|
|
int len, void *user);
|
|
int (*remove_xattr)(const char *path, const char *name, void *user);
|
|
int (*truncate)(const char *path, u64 size, void *user);
|
|
int (*chmod)(const char *path, u64 mode, void *user);
|
|
int (*chown)(const char *path, u64 uid, u64 gid, void *user);
|
|
int (*utimes)(const char *path, struct timespec *at,
|
|
struct timespec *mt, struct timespec *ct,
|
|
void *user);
|
|
int (*update_extent)(const char *path, u64 offset, u64 len, void *user);
|
|
};
|
|
|
|
int btrfs_read_and_process_send_stream(int fd,
|
|
struct btrfs_send_ops *ops, void *user,
|
|
int honor_end_cmd,
|
|
u64 max_errors);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SEND_STREAM_H_ */
|