]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - libfrog/scrub.c
libfrog: fix bitmap error communication problems
[thirdparty/xfsprogs-dev.git] / libfrog / scrub.c
CommitLineData
5ef3b66a
DW
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) 2019 Oracle, Inc.
4 * All Rights Reserved.
5 */
6#include "xfs.h"
7#include "fsgeom.h"
8#include "scrub.h"
9
10/* These must correspond to XFS_SCRUB_TYPE_ */
11const struct xfrog_scrub_descr xfrog_scrubbers[XFS_SCRUB_TYPE_NR] = {
12 [XFS_SCRUB_TYPE_PROBE] = {
13 .name = "probe",
14 .descr = "metadata",
15 .type = XFROG_SCRUB_TYPE_NONE,
16 },
17 [XFS_SCRUB_TYPE_SB] = {
18 .name = "sb",
19 .descr = "superblock",
20 .type = XFROG_SCRUB_TYPE_AGHEADER,
21 },
22 [XFS_SCRUB_TYPE_AGF] = {
23 .name = "agf",
24 .descr = "free space header",
25 .type = XFROG_SCRUB_TYPE_AGHEADER,
26 },
27 [XFS_SCRUB_TYPE_AGFL] = {
28 .name = "agfl",
29 .descr = "free list",
30 .type = XFROG_SCRUB_TYPE_AGHEADER,
31 },
32 [XFS_SCRUB_TYPE_AGI] = {
33 .name = "agi",
34 .descr = "inode header",
35 .type = XFROG_SCRUB_TYPE_AGHEADER,
36 },
37 [XFS_SCRUB_TYPE_BNOBT] = {
38 .name = "bnobt",
39 .descr = "freesp by block btree",
40 .type = XFROG_SCRUB_TYPE_PERAG,
41 },
42 [XFS_SCRUB_TYPE_CNTBT] = {
43 .name = "cntbt",
44 .descr = "freesp by length btree",
45 .type = XFROG_SCRUB_TYPE_PERAG,
46 },
47 [XFS_SCRUB_TYPE_INOBT] = {
48 .name = "inobt",
49 .descr = "inode btree",
50 .type = XFROG_SCRUB_TYPE_PERAG,
51 },
52 [XFS_SCRUB_TYPE_FINOBT] = {
53 .name = "finobt",
54 .descr = "free inode btree",
55 .type = XFROG_SCRUB_TYPE_PERAG,
56 },
57 [XFS_SCRUB_TYPE_RMAPBT] = {
58 .name = "rmapbt",
59 .descr = "reverse mapping btree",
60 .type = XFROG_SCRUB_TYPE_PERAG,
61 },
62 [XFS_SCRUB_TYPE_REFCNTBT] = {
63 .name = "refcountbt",
64 .descr = "reference count btree",
65 .type = XFROG_SCRUB_TYPE_PERAG,
66 },
67 [XFS_SCRUB_TYPE_INODE] = {
68 .name = "inode",
69 .descr = "inode record",
70 .type = XFROG_SCRUB_TYPE_INODE,
71 },
72 [XFS_SCRUB_TYPE_BMBTD] = {
73 .name = "bmapbtd",
74 .descr = "data block map",
75 .type = XFROG_SCRUB_TYPE_INODE,
76 },
77 [XFS_SCRUB_TYPE_BMBTA] = {
78 .name = "bmapbta",
79 .descr = "attr block map",
80 .type = XFROG_SCRUB_TYPE_INODE,
81 },
82 [XFS_SCRUB_TYPE_BMBTC] = {
83 .name = "bmapbtc",
84 .descr = "CoW block map",
85 .type = XFROG_SCRUB_TYPE_INODE,
86 },
87 [XFS_SCRUB_TYPE_DIR] = {
88 .name = "directory",
89 .descr = "directory entries",
90 .type = XFROG_SCRUB_TYPE_INODE,
91 },
92 [XFS_SCRUB_TYPE_XATTR] = {
93 .name = "xattr",
94 .descr = "extended attributes",
95 .type = XFROG_SCRUB_TYPE_INODE,
96 },
97 [XFS_SCRUB_TYPE_SYMLINK] = {
98 .name = "symlink",
99 .descr = "symbolic link",
100 .type = XFROG_SCRUB_TYPE_INODE,
101 },
102 [XFS_SCRUB_TYPE_PARENT] = {
103 .name = "parent",
104 .descr = "parent pointer",
105 .type = XFROG_SCRUB_TYPE_INODE,
106 },
107 [XFS_SCRUB_TYPE_RTBITMAP] = {
108 .name = "rtbitmap",
109 .descr = "realtime bitmap",
110 .type = XFROG_SCRUB_TYPE_FS,
111 },
112 [XFS_SCRUB_TYPE_RTSUM] = {
113 .name = "rtsummary",
114 .descr = "realtime summary",
115 .type = XFROG_SCRUB_TYPE_FS,
116 },
117 [XFS_SCRUB_TYPE_UQUOTA] = {
118 .name = "usrquota",
119 .descr = "user quotas",
120 .type = XFROG_SCRUB_TYPE_FS,
121 },
122 [XFS_SCRUB_TYPE_GQUOTA] = {
123 .name = "grpquota",
124 .descr = "group quotas",
125 .type = XFROG_SCRUB_TYPE_FS,
126 },
127 [XFS_SCRUB_TYPE_PQUOTA] = {
128 .name = "prjquota",
129 .descr = "project quotas",
130 .type = XFROG_SCRUB_TYPE_FS,
131 },
8dd3922c
DW
132 [XFS_SCRUB_TYPE_FSCOUNTERS] = {
133 .name = "fscounters",
134 .descr = "filesystem summary counters",
135 .type = XFROG_SCRUB_TYPE_FS,
136 .flags = XFROG_SCRUB_DESCR_SUMMARY,
137 },
5ef3b66a
DW
138};
139
140int
141xfrog_scrub_metadata(
142 struct xfs_fd *xfd,
143 struct xfs_scrub_metadata *meta)
144{
145 return ioctl(xfd->fd, XFS_IOC_SCRUB_METADATA, meta);
146}