1 /* SPDX-License-Identifier: GPL-2.0-or-later * 1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 2 /* 3 * Copyright (c) 2020-2024 Oracle. All Rights 3 * Copyright (c) 2020-2024 Oracle. All Rights Reserved. 4 * Author: Darrick J. Wong <djwong@kernel.org> 4 * Author: Darrick J. Wong <djwong@kernel.org> 5 */ 5 */ 6 #ifndef __XFS_SCRUB_FINDPARENT_H__ 6 #ifndef __XFS_SCRUB_FINDPARENT_H__ 7 #define __XFS_SCRUB_FINDPARENT_H__ 7 #define __XFS_SCRUB_FINDPARENT_H__ 8 8 9 struct xrep_parent_scan_info { 9 struct xrep_parent_scan_info { 10 struct xfs_scrub *sc; 10 struct xfs_scrub *sc; 11 11 12 /* Inode scan cursor. */ 12 /* Inode scan cursor. */ 13 struct xchk_iscan iscan; 13 struct xchk_iscan iscan; 14 14 15 /* Hook to capture directory entry upd 15 /* Hook to capture directory entry updates. */ 16 struct xfs_dir_hook dhook; 16 struct xfs_dir_hook dhook; 17 17 18 /* Lock protecting parent_ino. */ 18 /* Lock protecting parent_ino. */ 19 struct mutex lock; 19 struct mutex lock; 20 20 21 /* Parent inode that we've found. */ 21 /* Parent inode that we've found. */ 22 xfs_ino_t parent_ino; 22 xfs_ino_t parent_ino; 23 23 24 bool lookup_parent; 24 bool lookup_parent; 25 }; 25 }; 26 26 27 int __xrep_findparent_scan_start(struct xfs_sc 27 int __xrep_findparent_scan_start(struct xfs_scrub *sc, 28 struct xrep_parent_scan_info * 28 struct xrep_parent_scan_info *pscan, 29 notifier_fn_t custom_fn); 29 notifier_fn_t custom_fn); 30 static inline int xrep_findparent_scan_start(s 30 static inline int xrep_findparent_scan_start(struct xfs_scrub *sc, 31 struct xrep_parent_scan_info * 31 struct xrep_parent_scan_info *pscan) 32 { 32 { 33 return __xrep_findparent_scan_start(sc 33 return __xrep_findparent_scan_start(sc, pscan, NULL); 34 } 34 } 35 int xrep_findparent_scan(struct xrep_parent_sc 35 int xrep_findparent_scan(struct xrep_parent_scan_info *pscan); 36 void xrep_findparent_scan_teardown(struct xrep 36 void xrep_findparent_scan_teardown(struct xrep_parent_scan_info *pscan); 37 37 38 static inline void 38 static inline void 39 xrep_findparent_scan_found( 39 xrep_findparent_scan_found( 40 struct xrep_parent_scan_info *pscan 40 struct xrep_parent_scan_info *pscan, 41 xfs_ino_t ino) 41 xfs_ino_t ino) 42 { 42 { 43 mutex_lock(&pscan->lock); 43 mutex_lock(&pscan->lock); 44 pscan->parent_ino = ino; 44 pscan->parent_ino = ino; 45 mutex_unlock(&pscan->lock); 45 mutex_unlock(&pscan->lock); 46 } 46 } 47 47 48 void xrep_findparent_scan_finish_early(struct 48 void xrep_findparent_scan_finish_early(struct xrep_parent_scan_info *pscan, 49 xfs_ino_t ino); 49 xfs_ino_t ino); 50 50 51 int xrep_findparent_confirm(struct xfs_scrub * 51 int xrep_findparent_confirm(struct xfs_scrub *sc, xfs_ino_t *parent_ino); 52 52 53 xfs_ino_t xrep_findparent_self_reference(struc 53 xfs_ino_t xrep_findparent_self_reference(struct xfs_scrub *sc); 54 xfs_ino_t xrep_findparent_from_dcache(struct x 54 xfs_ino_t xrep_findparent_from_dcache(struct xfs_scrub *sc); 55 55 56 #endif /* __XFS_SCRUB_FINDPARENT_H__ */ 56 #endif /* __XFS_SCRUB_FINDPARENT_H__ */ 57 57
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.