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