]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/btrfs-util.h
tree-wide: place #pragma once at the same place everywhere
[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
LP
47typedef enum BtrfsSnapshotFlags {
48 BTRFS_SNAPSHOT_FALLBACK_COPY = 1,
49 BTRFS_SNAPSHOT_READ_ONLY = 2,
f70a17f8 50 BTRFS_SNAPSHOT_RECURSIVE = 4,
5bcd08db 51 BTRFS_SNAPSHOT_QUOTA = 8,
e9bc1871
LP
52} BtrfsSnapshotFlags;
53
5bcd08db
LP
54typedef enum BtrfsRemoveFlags {
55 BTRFS_REMOVE_RECURSIVE = 1,
56 BTRFS_REMOVE_QUOTA = 2,
57} BtrfsRemoveFlags;
58
21222ea5 59int btrfs_is_filesystem(int fd);
2904e949
LP
60
61int btrfs_is_subvol_fd(int fd);
62int btrfs_is_subvol(const char *path);
d7c7c334 63
5bcd08db
LP
64int btrfs_reflink(int infd, int outfd);
65int btrfs_clone_range(int infd, uint64_t in_offset, int ofd, uint64_t out_offset, uint64_t sz);
66
67int btrfs_get_block_device_fd(int fd, dev_t *dev);
68int btrfs_get_block_device(const char *path, dev_t *dev);
69
70int btrfs_defrag_fd(int fd);
71int btrfs_defrag(const char *p);
72
73int btrfs_quota_enable_fd(int fd, bool b);
74int btrfs_quota_enable(const char *path, bool b);
75
76int btrfs_quota_scan_start(int fd);
77int btrfs_quota_scan_wait(int fd);
78int btrfs_quota_scan_ongoing(int fd);
79
80int btrfs_resize_loopback_fd(int fd, uint64_t size, bool grow_only);
81int btrfs_resize_loopback(const char *path, uint64_t size, bool grow_only);
82
d7c7c334 83int btrfs_subvol_make(const char *path);
d7b8eec7 84int btrfs_subvol_make_label(const char *path);
587fec42 85
e9bc1871
LP
86int btrfs_subvol_snapshot_fd(int old_fd, const char *new_path, BtrfsSnapshotFlags flags);
87int btrfs_subvol_snapshot(const char *old_path, const char *new_path, BtrfsSnapshotFlags flags);
10f9c755 88
5bcd08db
LP
89int btrfs_subvol_remove(const char *path, BtrfsRemoveFlags flags);
90int btrfs_subvol_remove_fd(int fd, const char *subvolume, BtrfsRemoveFlags flags);
91
0d6e763b 92int btrfs_subvol_set_read_only_fd(int fd, bool b);
10f9c755
LP
93int btrfs_subvol_set_read_only(const char *path, bool b);
94int btrfs_subvol_get_read_only_fd(int fd);
5bcd08db 95
90578cbd 96int btrfs_subvol_get_id(int fd, const char *subvolume, uint64_t *ret);
10f9c755 97int btrfs_subvol_get_id_fd(int fd, uint64_t *ret);
5bcd08db 98int btrfs_subvol_get_parent(int fd, uint64_t subvol_id, uint64_t *ret);
d7c7c334 99
5bcd08db 100int btrfs_subvol_get_info_fd(int fd, uint64_t subvol_id, BtrfsSubvolInfo *info);
d7c7c334 101
5bcd08db 102int btrfs_subvol_find_subtree_qgroup(int fd, uint64_t subvol_id, uint64_t *ret);
f27a3864 103
5bcd08db
LP
104int btrfs_subvol_get_subtree_quota(const char *path, uint64_t subvol_id, BtrfsQuotaInfo *quota);
105int btrfs_subvol_get_subtree_quota_fd(int fd, uint64_t subvol_id, BtrfsQuotaInfo *quota);
754061ce 106
5bcd08db
LP
107int btrfs_subvol_set_subtree_quota_limit(const char *path, uint64_t subvol_id, uint64_t referenced_max);
108int btrfs_subvol_set_subtree_quota_limit_fd(int fd, uint64_t subvol_id, uint64_t referenced_max);
d6ce17c7 109
5bcd08db
LP
110int btrfs_subvol_auto_qgroup_fd(int fd, uint64_t subvol_id, bool new_qgroup);
111int btrfs_subvol_auto_qgroup(const char *path, uint64_t subvol_id, bool create_intermediary_qgroup);
efe02862 112
5bcd08db
LP
113int btrfs_qgroupid_make(uint64_t level, uint64_t id, uint64_t *ret);
114int btrfs_qgroupid_split(uint64_t qgroupid, uint64_t *level, uint64_t *id);
115
116int btrfs_qgroup_create(int fd, uint64_t qgroupid);
117int btrfs_qgroup_destroy(int fd, uint64_t qgroupid);
118int btrfs_qgroup_destroy_recursive(int fd, uint64_t qgroupid);
119
120int btrfs_qgroup_set_limit_fd(int fd, uint64_t qgroupid, uint64_t referenced_max);
121int btrfs_qgroup_set_limit(const char *path, uint64_t qgroupid, uint64_t referenced_max);
122
123int btrfs_qgroup_copy_limits(int fd, uint64_t old_qgroupid, uint64_t new_qgroupid);
124
125int btrfs_qgroup_assign(int fd, uint64_t child, uint64_t parent);
126int btrfs_qgroup_unassign(int fd, uint64_t child, uint64_t parent);
d9e2daaf 127
5bcd08db 128int btrfs_qgroup_find_parents(int fd, uint64_t qgroupid, uint64_t **ret);
3f952f92 129
5bcd08db
LP
130int btrfs_qgroup_get_quota_fd(int fd, uint64_t qgroupid, BtrfsQuotaInfo *quota);
131int btrfs_qgroup_get_quota(const char *path, uint64_t qgroupid, BtrfsQuotaInfo *quota);