1*5d9b54a4SDarrick J. Wong /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*5d9b54a4SDarrick J. Wong /* 3*5d9b54a4SDarrick J. Wong * Copyright (c) 2018-2024 Oracle. All Rights Reserved. 4*5d9b54a4SDarrick J. Wong * Author: Darrick J. Wong <djwong@kernel.org> 5*5d9b54a4SDarrick J. Wong */ 6*5d9b54a4SDarrick J. Wong #ifndef __XFS_METADIR_H__ 7*5d9b54a4SDarrick J. Wong #define __XFS_METADIR_H__ 8*5d9b54a4SDarrick J. Wong 9*5d9b54a4SDarrick J. Wong /* Cleanup widget for metadata inode creation and deletion. */ 10*5d9b54a4SDarrick J. Wong struct xfs_metadir_update { 11*5d9b54a4SDarrick J. Wong /* Parent directory */ 12*5d9b54a4SDarrick J. Wong struct xfs_inode *dp; 13*5d9b54a4SDarrick J. Wong 14*5d9b54a4SDarrick J. Wong /* Path to metadata file */ 15*5d9b54a4SDarrick J. Wong const char *path; 16*5d9b54a4SDarrick J. Wong 17*5d9b54a4SDarrick J. Wong /* Parent pointer update context */ 18*5d9b54a4SDarrick J. Wong struct xfs_parent_args *ppargs; 19*5d9b54a4SDarrick J. Wong 20*5d9b54a4SDarrick J. Wong /* Child metadata file */ 21*5d9b54a4SDarrick J. Wong struct xfs_inode *ip; 22*5d9b54a4SDarrick J. Wong 23*5d9b54a4SDarrick J. Wong struct xfs_trans *tp; 24*5d9b54a4SDarrick J. Wong 25*5d9b54a4SDarrick J. Wong enum xfs_metafile_type metafile_type; 26*5d9b54a4SDarrick J. Wong 27*5d9b54a4SDarrick J. Wong unsigned int dp_locked:1; 28*5d9b54a4SDarrick J. Wong unsigned int ip_locked:1; 29*5d9b54a4SDarrick J. Wong }; 30*5d9b54a4SDarrick J. Wong 31*5d9b54a4SDarrick J. Wong int xfs_metadir_load(struct xfs_trans *tp, struct xfs_inode *dp, 32*5d9b54a4SDarrick J. Wong const char *path, enum xfs_metafile_type metafile_type, 33*5d9b54a4SDarrick J. Wong struct xfs_inode **ipp); 34*5d9b54a4SDarrick J. Wong 35*5d9b54a4SDarrick J. Wong int xfs_metadir_start_create(struct xfs_metadir_update *upd); 36*5d9b54a4SDarrick J. Wong int xfs_metadir_create(struct xfs_metadir_update *upd, umode_t mode); 37*5d9b54a4SDarrick J. Wong 38*5d9b54a4SDarrick J. Wong int xfs_metadir_start_link(struct xfs_metadir_update *upd); 39*5d9b54a4SDarrick J. Wong int xfs_metadir_link(struct xfs_metadir_update *upd); 40*5d9b54a4SDarrick J. Wong 41*5d9b54a4SDarrick J. Wong int xfs_metadir_commit(struct xfs_metadir_update *upd); 42*5d9b54a4SDarrick J. Wong void xfs_metadir_cancel(struct xfs_metadir_update *upd, int error); 43*5d9b54a4SDarrick J. Wong 44*5d9b54a4SDarrick J. Wong int xfs_metadir_mkdir(struct xfs_inode *dp, const char *path, 45*5d9b54a4SDarrick J. Wong struct xfs_inode **ipp); 46*5d9b54a4SDarrick J. Wong 47*5d9b54a4SDarrick J. Wong #endif /* __XFS_METADIR_H__ */ 48