File Index
Files and directories
Sign in
FILE

xfs_parent.h

File preview with syntax highlighting.

linux-6.19.14/fs/xfs/libxfs/xfs_parent.h OBJECTIVE-C
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Copyright (c) 2022-2024 Oracle.
  4 * All Rights Reserved.
  5 */
  6#ifndef	__XFS_PARENT_H__
  7#define	__XFS_PARENT_H__
  8
  9/* Metadata validators */
 10bool xfs_parent_namecheck(unsigned int attr_flags, const void *name,
 11		size_t length);
 12bool xfs_parent_valuecheck(struct xfs_mount *mp, const void *value,
 13		size_t valuelen);
 14
 15xfs_dahash_t xfs_parent_hashval(struct xfs_mount *mp, const uint8_t *name,
 16		int namelen, xfs_ino_t parent_ino);
 17xfs_dahash_t xfs_parent_hashattr(struct xfs_mount *mp, const uint8_t *name,
 18		int namelen, const void *value, int valuelen);
 19
 20/* Initializes a xfs_parent_rec to be stored as an attribute name. */
 21static inline void
 22xfs_parent_rec_init(
 23	struct xfs_parent_rec	*rec,
 24	xfs_ino_t		ino,
 25	uint32_t		gen)
 26{
 27	rec->p_ino = cpu_to_be64(ino);
 28	rec->p_gen = cpu_to_be32(gen);
 29}
 30
 31/* Initializes a xfs_parent_rec to be stored as an attribute name. */
 32static inline void
 33xfs_inode_to_parent_rec(
 34	struct xfs_parent_rec	*rec,
 35	const struct xfs_inode	*dp)
 36{
 37	xfs_parent_rec_init(rec, dp->i_ino, VFS_IC(dp)->i_generation);
 38}
 39
 40extern struct kmem_cache	*xfs_parent_args_cache;
 41
 42/*
 43 * Parent pointer information needed to pass around the deferred xattr update
 44 * machinery.
 45 */
 46struct xfs_parent_args {
 47	struct xfs_parent_rec	rec;
 48	struct xfs_parent_rec	new_rec;
 49	struct xfs_da_args	args;
 50};
 51
 52/*
 53 * Start a parent pointer update by allocating the context object we need to
 54 * perform a parent pointer update.
 55 */
 56static inline int
 57xfs_parent_start(
 58	struct xfs_mount	*mp,
 59	struct xfs_parent_args	**ppargsp)
 60{
 61	if (!xfs_has_parent(mp)) {
 62		*ppargsp = NULL;
 63		return 0;
 64	}
 65
 66	*ppargsp = kmem_cache_zalloc(xfs_parent_args_cache, GFP_KERNEL);
 67	if (!*ppargsp)
 68		return -ENOMEM;
 69	return 0;
 70}
 71
 72/* Finish a parent pointer update by freeing the context object. */
 73static inline void
 74xfs_parent_finish(
 75	struct xfs_mount	*mp,
 76	struct xfs_parent_args	*ppargs)
 77{
 78	if (ppargs)
 79		kmem_cache_free(xfs_parent_args_cache, ppargs);
 80}
 81
 82int xfs_parent_addname(struct xfs_trans *tp, struct xfs_parent_args *ppargs,
 83		struct xfs_inode *dp, const struct xfs_name *parent_name,
 84		struct xfs_inode *child);
 85int xfs_parent_removename(struct xfs_trans *tp, struct xfs_parent_args *ppargs,
 86		struct xfs_inode *dp, const struct xfs_name *parent_name,
 87		struct xfs_inode *child);
 88int xfs_parent_replacename(struct xfs_trans *tp,
 89		struct xfs_parent_args *ppargs,
 90		struct xfs_inode *old_dp, const struct xfs_name *old_name,
 91		struct xfs_inode *new_dp, const struct xfs_name *new_name,
 92		struct xfs_inode *child);
 93
 94int xfs_parent_from_attr(struct xfs_mount *mp, unsigned int attr_flags,
 95		const unsigned char *name, unsigned int namelen,
 96		const void *value, unsigned int valuelen,
 97		xfs_ino_t *parent_ino, uint32_t *parent_gen);
 98
 99/* Repair functions */
100int xfs_parent_lookup(struct xfs_trans *tp, struct xfs_inode *ip,
101		const struct xfs_name *name, struct xfs_parent_rec *pptr,
102		struct xfs_da_args *scratch);
103int xfs_parent_set(struct xfs_inode *ip, xfs_ino_t owner,
104		const struct xfs_name *name, struct xfs_parent_rec *pptr,
105		struct xfs_da_args *scratch);
106int xfs_parent_unset(struct xfs_inode *ip, xfs_ino_t owner,
107		const struct xfs_name *name, struct xfs_parent_rec *pptr,
108		struct xfs_da_args *scratch);
109
110#endif /* __XFS_PARENT_H__ */
~/ Read-only file preview.