brintos

brintos / linux-shallow public Read only

0
0
Text · 3.2 KiB · b803652 Raw
111 lines · c
1// SPDX-License-Identifier: GPL-2.02/*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 void22xfs_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 void33xfs_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 update44 * 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 to54 * perform a parent pointer update.55 */56static inline int57xfs_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 void74xfs_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__ */111