Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 : /* 3 : * Copyright (C) 2020-2023 Oracle. All Rights Reserved. 4 : * Author: Darrick J. Wong <djwong@kernel.org> 5 : */ 6 : #ifndef __XFS_SCRUB_FINDPARENT_H__ 7 : #define __XFS_SCRUB_FINDPARENT_H__ 8 : 9 : struct xrep_parent_scan_info { 10 : struct xfs_scrub *sc; 11 : 12 : /* Inode scan cursor. */ 13 : struct xchk_iscan iscan; 14 : 15 : /* Hook to capture directory entry updates. */ 16 : struct xfs_dir_hook hooks; 17 : 18 : /* Lock protecting parent_ino. */ 19 : struct mutex lock; 20 : 21 : /* Parent inode that we've found. */ 22 : xfs_ino_t parent_ino; 23 : 24 : bool lookup_parent; 25 : }; 26 : 27 : int __xrep_findparent_scan_start(struct xfs_scrub *sc, 28 : struct xrep_parent_scan_info *pscan, 29 : notifier_fn_t custom_fn); 30 : static inline int xrep_findparent_scan_start(struct xfs_scrub *sc, 31 : struct xrep_parent_scan_info *pscan) 32 : { 33 44323 : return __xrep_findparent_scan_start(sc, pscan, NULL); 34 : } 35 : int xrep_findparent_scan(struct xrep_parent_scan_info *pscan); 36 : void xrep_findparent_scan_teardown(struct xrep_parent_scan_info *pscan); 37 : 38 : static inline void 39 : xrep_findparent_scan_found( 40 : struct xrep_parent_scan_info *pscan, 41 : xfs_ino_t ino) 42 : { 43 2379241 : mutex_lock(&pscan->lock); 44 2379970 : pscan->parent_ino = ino; 45 2379970 : mutex_unlock(&pscan->lock); 46 2146879 : } 47 : 48 : void xrep_findparent_scan_finish_early(struct xrep_parent_scan_info *pscan, 49 : xfs_ino_t ino); 50 : 51 : int xrep_findparent_confirm(struct xfs_scrub *sc, xfs_ino_t *parent_ino); 52 : 53 : xfs_ino_t xrep_findparent_self_reference(struct xfs_scrub *sc); 54 : xfs_ino_t xrep_findparent_from_dcache(struct xfs_scrub *sc); 55 : 56 : int xrep_findparent_from_pptrs(struct xfs_scrub *sc, xfs_ino_t *inop); 57 : 58 : #endif /* __XFS_SCRUB_FINDPARENT_H__ */