]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/btrfs-util.h
in-addr-util: add new helper call in_addr_prefix_from_string_auto()
[thirdparty/systemd.git] / src / basic / btrfs-util.h
CommitLineData
0ef6f454
LP
1#pragma once
2
d7c7c334
LP
3/***
4 This file is part of systemd.
5
6 Copyright 2014 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22#include <stdbool.h>
11c3a366 23#include <stdint.h>
d7c7c334
LP
24#include <sys/types.h>
25
11c3a366
TA
26#include "sd-id128.h"
27
10f9c755
LP
28#include "time-util.h"
29
30typedef struct BtrfsSubvolInfo {
31 uint64_t subvol_id;
32 usec_t otime;
33
34 sd_id128_t uuid;
35 sd_id128_t parent_uuid;
36
37 bool read_only;
38} BtrfsSubvolInfo;
39
b6b18498 40typedef struct BtrfsQuotaInfo {
cb81cd80 41 uint64_t referenced;
b6b18498 42 uint64_t exclusive;
cb81cd80 43 uint64_t referenced_max;
b6b18498
LP
44 uint64_t exclusive_max;
45} BtrfsQuotaInfo;
46
e9bc1871 47typedef enum BtrfsSnapshotFlags {
17cbb288 48 BTRFS_SNAPSHOT_FALLBACK_COPY = 1, /* If the source isn't a subvolume, reflink everything */
e9bc1871 49 BTRFS_SNAPSHOT_READ_ONLY = 2,
f70a17f8 50 BTRFS_SNAPSHOT_RECURSIVE = 4,
5bcd08db 51 BTRFS_SNAPSHOT_QUOTA = 8,
17cbb288
LP
52 BTRFS_SNAPSHOT_FALLBACK_DIRECTORY = 16, /* If the destination doesn't support subvolumes, reflink/copy instead */
53 BTRFS_SNAPSHOT_FALLBACK_IMMUTABLE = 32, /* When we can't create a subvolume, use the FS_IMMUTABLE attribute for indicating read-only */
e9bc1871
LP
54} BtrfsSnapshotFlags;
55
5bcd08db
LP
56typedef enum BtrfsRemoveFlags {
57 BTRFS_REMOVE_RECURSIVE = 1,
58 BTRFS_REMOVE_QUOTA = 2,
59} BtrfsRemoveFlags;
60
21222ea5 61int btrfs_is_filesystem(int fd);
2904e949
LP
62
63int btrfs_is_subvol_fd(int fd);
64int btrfs_is_subvol(const char *path);
d7c7c334 65
5bcd08db
LP
66int btrfs_reflink(int infd, int outfd);
67int btrfs_clone_range(int infd, uint64_t in_offset, int ofd, uint64_t out_offset, uint64_t sz);
68
69int btrfs_get_block_device_fd(int fd, dev_t *dev);
70int btrfs_get_block_device(const char *path, dev_t *dev);
71
72int btrfs_defrag_fd(int fd);
73int btrfs_defrag(const char *p);
74
75int btrfs_quota_enable_fd(int fd, bool b);
76int btrfs_quota_enable(const char *path, bool b);
77
78int btrfs_quota_scan_start(int fd);
79int btrfs_quota_scan_wait(int fd);
80int btrfs_quota_scan_ongoing(int fd);
81
82int btrfs_resize_loopback_fd(int fd, uint64_t size, bool grow_only);
83int btrfs_resize_loopback(const char *path, uint64_t size, bool grow_only);
84
d7c7c334 85int btrfs_subvol_make(const char *path);
d7b8eec7 86int btrfs_subvol_make_label(const char *path);
587fec42 87
e9bc1871
LP
88int btrfs_subvol_snapshot_fd(int old_fd, const char *new_path, BtrfsSnapshotFlags flags);
89int btrfs_subvol_snapshot(const char *old_path, const char *new_path, BtrfsSnapshotFlags flags);
10f9c755 90
5bcd08db
LP
91int btrfs_subvol_remove(const char *path, BtrfsRemoveFlags flags);
92int btrfs_subvol_remove_fd(int fd, const char *subvolume, BtrfsRemoveFlags flags);
93
0d6e763b 94int btrfs_subvol_set_read_only_fd(int fd, bool b);
10f9c755
LP
95int btrfs_subvol_set_read_only(const char *path, bool b);
96int btrfs_subvol_get_read_only_fd(int fd);
5bcd08db 97
90578cbd 98int btrfs_subvol_get_id(int fd, const char *subvolume, uint64_t *ret);
10f9c755 99int btrfs_subvol_get_id_fd(int fd, uint64_t *ret);
5bcd08db 100int btrfs_subvol_get_parent(int fd, uint64_t subvol_id, uint64_t *ret);
d7c7c334 101
5bcd08db 102int btrfs_subvol_get_info_fd(int fd, uint64_t subvol_id, BtrfsSubvolInfo *info);
d7c7c334 103
5bcd08db 104int btrfs_subvol_find_subtree_qgroup(int fd, uint64_t subvol_id, uint64_t *ret);
f27a3864 105
5bcd08db
LP
106int btrfs_subvol_get_subtree_quota(const char *path, uint64_t subvol_id, BtrfsQuotaInfo *quota);
107int btrfs_subvol_get_subtree_quota_fd(int fd, uint64_t subvol_id, BtrfsQuotaInfo *quota);
754061ce 108
5bcd08db
LP
109int btrfs_subvol_set_subtree_quota_limit(const char *path, uint64_t subvol_id, uint64_t referenced_max);
110int btrfs_subvol_set_subtree_quota_limit_fd(int fd, uint64_t subvol_id, uint64_t referenced_max);
d6ce17c7 111
5bcd08db
LP
112int btrfs_subvol_auto_qgroup_fd(int fd, uint64_t subvol_id, bool new_qgroup);
113int btrfs_subvol_auto_qgroup(const char *path, uint64_t subvol_id, bool create_intermediary_qgroup);
efe02862 114
5bcd08db
LP
115int btrfs_qgroupid_make(uint64_t level, uint64_t id, uint64_t *ret);
116int btrfs_qgroupid_split(uint64_t qgroupid, uint64_t *level, uint64_t *id);
117
118int btrfs_qgroup_create(int fd, uint64_t qgroupid);
119int btrfs_qgroup_destroy(int fd, uint64_t qgroupid);
120int btrfs_qgroup_destroy_recursive(int fd, uint64_t qgroupid);
121
122int btrfs_qgroup_set_limit_fd(int fd, uint64_t qgroupid, uint64_t referenced_max);
123int btrfs_qgroup_set_limit(const char *path, uint64_t qgroupid, uint64_t referenced_max);
124
125int btrfs_qgroup_copy_limits(int fd, uint64_t old_qgroupid, uint64_t new_qgroupid);
126
127int btrfs_qgroup_assign(int fd, uint64_t child, uint64_t parent);
128int btrfs_qgroup_unassign(int fd, uint64_t child, uint64_t parent);
d9e2daaf 129
5bcd08db 130int btrfs_qgroup_find_parents(int fd, uint64_t qgroupid, uint64_t **ret);
3f952f92 131
5bcd08db
LP
132int btrfs_qgroup_get_quota_fd(int fd, uint64_t qgroupid, BtrfsQuotaInfo *quota);
133int btrfs_qgroup_get_quota(const char *path, uint64_t qgroupid, BtrfsQuotaInfo *quota);