X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libbtrfsutil%2Fbtrfsutil.h;h=6d655f498b8b5a761ea5b87a8bdd5dd1e582e12e;hb=9708f0d54e0381017114c0a4ca1f48e7aa8a8bbc;hp=09a71c32fe842b3ed12a4451b91cf6f14b9a031f;hpb=0b8512b7f5a6106efcab371471c472572a55367e;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/libbtrfsutil/btrfsutil.h b/libbtrfsutil/btrfsutil.h index 09a71c3..6d655f4 100644 --- a/libbtrfsutil/btrfsutil.h +++ b/libbtrfsutil/btrfsutil.h @@ -391,6 +391,98 @@ enum btrfs_util_error btrfs_util_create_subvolume_fd(int parent_fd, uint64_t *async_transid, struct btrfs_util_qgroup_inherit *qgroup_inherit); +/** + * BTRFS_UTIL_CREATE_SNAPSHOT_RECURSIVE - Also snapshot subvolumes beneath the + * source subvolume onto the same location on the new snapshot. + * + * Note that this is currently implemented in userspace non-atomically. Because + * it modifies the newly-created snapshot, it cannot be combined with + * %BTRFS_UTIL_CREATE_SNAPSHOT_READ_ONLY. It requires appropriate privilege + * (CAP_SYS_ADMIN). + */ +#define BTRFS_UTIL_CREATE_SNAPSHOT_RECURSIVE (1 << 0) +/** + * BTRFS_UTIL_CREATE_SNAPSHOT_READ_ONLY - Create a read-only snapshot. + */ +#define BTRFS_UTIL_CREATE_SNAPSHOT_READ_ONLY (1 << 1) +#define BTRFS_UTIL_CREATE_SNAPSHOT_MASK ((1 << 2) - 1) + +/** + * btrfs_util_create_snapshot() - Create a new snapshot from a source subvolume + * path. + * @source: Path of the existing subvolume to snapshot. + * @path: Where to create the snapshot. + * @flags: Bitmask of BTRFS_UTIL_CREATE_SNAPSHOT_* flags. + * @async_transid: See btrfs_util_create_subvolume(). If + * %BTRFS_UTIL_CREATE_SNAPSHOT_RECURSIVE was in @flags, then this will contain + * the largest transaction ID of all created subvolumes. + * @qgroup_inherit: See btrfs_util_create_subvolume(). + * + * Return: %BTRFS_UTIL_OK on success, non-zero error code on failure. + */ +enum btrfs_util_error btrfs_util_create_snapshot(const char *source, + const char *path, int flags, + uint64_t *async_transid, + struct btrfs_util_qgroup_inherit *qgroup_inherit); + +/** + * btrfs_util_create_snapshot_fd() - See btrfs_util_create_snapshot(). + */ +enum btrfs_util_error btrfs_util_create_snapshot_fd(int fd, const char *path, + int flags, + uint64_t *async_transid, + struct btrfs_util_qgroup_inherit *qgroup_inherit); + +/** + * btrfs_util_create_snapshot_fd2() - Create a new snapshot from a source + * subvolume file descriptor and a target parent file descriptor and name. + * @fd: File descriptor of the existing subvolume to snapshot. + * @parent_fd: File descriptor of the parent directory where the snapshot should + * be created. + * @name: Name of the snapshot to create. + * @flags: See btrfs_util_create_snapshot(). + * @async_transid: See btrfs_util_create_snapshot(). + * @qgroup_inherit: See btrfs_util_create_snapshot(). + */ +enum btrfs_util_error btrfs_util_create_snapshot_fd2(int fd, int parent_fd, + const char *name, + int flags, + uint64_t *async_transid, + struct btrfs_util_qgroup_inherit *qgroup_inherit); + +/** + * BTRFS_UTIL_DELETE_SUBVOLUME_RECURSIVE - Delete subvolumes beneath the given + * subvolume before attempting to delete the given subvolume. + * + * If this flag is not used, deleting a subvolume with child subvolumes is an + * error. Note that this is currently implemented in userspace non-atomically. + * It requires appropriate privilege (CAP_SYS_ADMIN). + */ +#define BTRFS_UTIL_DELETE_SUBVOLUME_RECURSIVE (1 << 0) +#define BTRFS_UTIL_DELETE_SUBVOLUME_MASK ((1 << 1) - 1) + +/** + * btrfs_util_delete_subvolume() - Delete a subvolume or snapshot. + * @path: Path of the subvolume to delete. + * @flags: Bitmask of BTRFS_UTIL_DELETE_SUBVOLUME_* flags. + * + * Return: %BTRFS_UTIL_OK on success, non-zero error code on failure. + */ +enum btrfs_util_error btrfs_util_delete_subvolume(const char *path, int flags); + +/** + * btrfs_util_delete_subvolume_fd() - Delete a subvolume or snapshot given its + * parent and name. + * @parent_fd: File descriptor of the subvolume's parent directory. + * @name: Name of the subvolume. + * @flags: See btrfs_util_delete_subvolume(). + * + * Return: %BTRFS_UTIL_OK on success, non-zero error code on failure. + */ +enum btrfs_util_error btrfs_util_delete_subvolume_fd(int parent_fd, + const char *name, + int flags); + struct btrfs_util_subvolume_iterator; /** @@ -489,6 +581,27 @@ enum btrfs_util_error btrfs_util_subvolume_iterator_next_info(struct btrfs_util_ struct btrfs_util_subvolume_info *subvol); /** + * btrfs_util_deleted_subvolumes() - Get a list of subvolume which have been + * deleted but not yet cleaned up. + * @path: Path on a Btrfs filesystem. + * @ids: Returned array of subvolume IDs. + * @n: Returned number of IDs in the @ids array. + * + * This requires appropriate privilege (CAP_SYS_ADMIN). + * + * Return: %BTRFS_UTIL_OK on success, non-zero error code on failure. + */ +enum btrfs_util_error btrfs_util_deleted_subvolumes(const char *path, + uint64_t **ids, + size_t *n); + +/** + * btrfs_util_deleted_subvolumes_fd() - See btrfs_util_deleted_subvolumes(). + */ +enum btrfs_util_error btrfs_util_deleted_subvolumes_fd(int fd, uint64_t **ids, + size_t *n); + +/** * btrfs_util_create_qgroup_inherit() - Create a qgroup inheritance specifier * for btrfs_util_create_subvolume() or btrfs_util_create_snapshot(). * @flags: Must be zero.