]> Git Repo - linux.git/blob - fs/xfs/scrub/orphanage.h
Merge patch series "riscv: Extension parsing fixes"
[linux.git] / fs / xfs / scrub / orphanage.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (c) 2021-2024 Oracle.  All Rights Reserved.
4  * Author: Darrick J. Wong <[email protected]>
5  */
6 #ifndef __XFS_SCRUB_ORPHANAGE_H__
7 #define __XFS_SCRUB_ORPHANAGE_H__
8
9 #ifdef CONFIG_XFS_ONLINE_REPAIR
10 int xrep_orphanage_create(struct xfs_scrub *sc);
11
12 /*
13  * If we're doing a repair, ensure that the orphanage exists and attach it to
14  * the scrub context.
15  */
16 static inline int
17 xrep_orphanage_try_create(
18         struct xfs_scrub        *sc)
19 {
20         int                     error;
21
22         ASSERT(sc->sm->sm_flags & XFS_SCRUB_IFLAG_REPAIR);
23
24         error = xrep_orphanage_create(sc);
25         switch (error) {
26         case 0:
27         case -ENOENT:
28         case -ENOTDIR:
29         case -ENOSPC:
30                 /*
31                  * If the orphanage can't be found or isn't a directory, we'll
32                  * keep going, but we won't be able to attach the file to the
33                  * orphanage if we can't find the parent.
34                  */
35                 return 0;
36         }
37
38         return error;
39 }
40
41 int xrep_orphanage_iolock_two(struct xfs_scrub *sc);
42
43 void xrep_orphanage_ilock(struct xfs_scrub *sc, unsigned int ilock_flags);
44 bool xrep_orphanage_ilock_nowait(struct xfs_scrub *sc,
45                 unsigned int ilock_flags);
46 void xrep_orphanage_iunlock(struct xfs_scrub *sc, unsigned int ilock_flags);
47
48 void xrep_orphanage_rele(struct xfs_scrub *sc);
49
50 /* Information about a request to add a file to the orphanage. */
51 struct xrep_adoption {
52         struct xfs_scrub        *sc;
53
54         /* Name used for the adoption. */
55         struct xfs_name         *xname;
56
57         /* Parent pointer context tracking */
58         struct xfs_parent_args  ppargs;
59
60         /* Block reservations for orphanage and child (if directory). */
61         unsigned int            orphanage_blkres;
62         unsigned int            child_blkres;
63
64         /*
65          * Does the caller want us to bump the child link count?  This is not
66          * needed when reattaching files that have become disconnected but have
67          * nlink > 1.  It is necessary when changing the directory tree
68          * structure.
69          */
70         bool                    bump_child_nlink:1;
71 };
72
73 bool xrep_orphanage_can_adopt(struct xfs_scrub *sc);
74
75 int xrep_adoption_trans_alloc(struct xfs_scrub *sc,
76                 struct xrep_adoption *adopt);
77 int xrep_adoption_compute_name(struct xrep_adoption *adopt,
78                 struct xfs_name *xname);
79 int xrep_adoption_move(struct xrep_adoption *adopt);
80 int xrep_adoption_trans_roll(struct xrep_adoption *adopt);
81 #else
82 struct xrep_adoption { /* empty */ };
83 # define xrep_orphanage_rele(sc)        ((void)0)
84 #endif /* CONFIG_XFS_ONLINE_REPAIR */
85
86 #endif /* __XFS_SCRUB_ORPHANAGE_H__ */
This page took 0.029156 seconds and 4 git commands to generate.