xref: /linux/fs/bcachefs/namei.h (revision 4f9786035f9e519db41375818e1d0b5f20da2f10)
14fcd4de0SKent Overstreet /* SPDX-License-Identifier: GPL-2.0 */
24fcd4de0SKent Overstreet #ifndef _BCACHEFS_NAMEI_H
34fcd4de0SKent Overstreet #define _BCACHEFS_NAMEI_H
44fcd4de0SKent Overstreet 
54fcd4de0SKent Overstreet #include "dirent.h"
64fcd4de0SKent Overstreet 
74fcd4de0SKent Overstreet struct posix_acl;
84fcd4de0SKent Overstreet 
94fcd4de0SKent Overstreet #define BCH_CREATE_TMPFILE		(1U << 0)
104fcd4de0SKent Overstreet #define BCH_CREATE_SUBVOL		(1U << 1)
114fcd4de0SKent Overstreet #define BCH_CREATE_SNAPSHOT		(1U << 2)
124fcd4de0SKent Overstreet #define BCH_CREATE_SNAPSHOT_RO		(1U << 3)
134fcd4de0SKent Overstreet 
144fcd4de0SKent Overstreet int bch2_create_trans(struct btree_trans *, subvol_inum,
154fcd4de0SKent Overstreet 		      struct bch_inode_unpacked *,
164fcd4de0SKent Overstreet 		      struct bch_inode_unpacked *,
174fcd4de0SKent Overstreet 		      const struct qstr *,
184fcd4de0SKent Overstreet 		      uid_t, gid_t, umode_t, dev_t,
194fcd4de0SKent Overstreet 		      struct posix_acl *,
204fcd4de0SKent Overstreet 		      struct posix_acl *,
214fcd4de0SKent Overstreet 		      subvol_inum, unsigned);
224fcd4de0SKent Overstreet 
234fcd4de0SKent Overstreet int bch2_link_trans(struct btree_trans *,
244fcd4de0SKent Overstreet 		    subvol_inum, struct bch_inode_unpacked *,
254fcd4de0SKent Overstreet 		    subvol_inum, struct bch_inode_unpacked *,
264fcd4de0SKent Overstreet 		    const struct qstr *);
274fcd4de0SKent Overstreet 
284fcd4de0SKent Overstreet int bch2_unlink_trans(struct btree_trans *, subvol_inum,
294fcd4de0SKent Overstreet 		      struct bch_inode_unpacked *,
304fcd4de0SKent Overstreet 		      struct bch_inode_unpacked *,
314fcd4de0SKent Overstreet 		      const struct qstr *, bool);
324fcd4de0SKent Overstreet 
334fcd4de0SKent Overstreet int bch2_rename_trans(struct btree_trans *,
344fcd4de0SKent Overstreet 		      subvol_inum, struct bch_inode_unpacked *,
354fcd4de0SKent Overstreet 		      subvol_inum, struct bch_inode_unpacked *,
364fcd4de0SKent Overstreet 		      struct bch_inode_unpacked *,
374fcd4de0SKent Overstreet 		      struct bch_inode_unpacked *,
384fcd4de0SKent Overstreet 		      const struct qstr *,
394fcd4de0SKent Overstreet 		      const struct qstr *,
404fcd4de0SKent Overstreet 		      enum bch_rename_mode);
414fcd4de0SKent Overstreet 
424fcd4de0SKent Overstreet bool bch2_reinherit_attrs(struct bch_inode_unpacked *,
434fcd4de0SKent Overstreet 			  struct bch_inode_unpacked *);
444fcd4de0SKent Overstreet 
454fcd4de0SKent Overstreet int bch2_inum_to_path(struct btree_trans *, subvol_inum, struct printbuf *);
464fcd4de0SKent Overstreet 
47*9b0d00a3SKent Overstreet int __bch2_check_dirent_target(struct btree_trans *,
48758ea4ffSKent Overstreet 			       struct btree_iter *,
49758ea4ffSKent Overstreet 			       struct bkey_s_c_dirent,
50*9b0d00a3SKent Overstreet 			       struct bch_inode_unpacked *, bool);
51*9b0d00a3SKent Overstreet 
52*9b0d00a3SKent Overstreet static inline bool inode_points_to_dirent(struct bch_inode_unpacked *inode,
53*9b0d00a3SKent Overstreet 					  struct bkey_s_c_dirent d)
54*9b0d00a3SKent Overstreet {
55*9b0d00a3SKent Overstreet 	return  inode->bi_dir		== d.k->p.inode &&
56*9b0d00a3SKent Overstreet 		inode->bi_dir_offset	== d.k->p.offset;
57*9b0d00a3SKent Overstreet }
58*9b0d00a3SKent Overstreet 
59*9b0d00a3SKent Overstreet static inline int bch2_check_dirent_target(struct btree_trans *trans,
60*9b0d00a3SKent Overstreet 					   struct btree_iter *dirent_iter,
61*9b0d00a3SKent Overstreet 					   struct bkey_s_c_dirent d,
62*9b0d00a3SKent Overstreet 					   struct bch_inode_unpacked *target,
63*9b0d00a3SKent Overstreet 					   bool in_fsck)
64*9b0d00a3SKent Overstreet {
65*9b0d00a3SKent Overstreet 	if (likely(inode_points_to_dirent(target, d) &&
66*9b0d00a3SKent Overstreet 		   d.v->d_type == inode_d_type(target)))
67*9b0d00a3SKent Overstreet 		return 0;
68*9b0d00a3SKent Overstreet 
69*9b0d00a3SKent Overstreet 	return __bch2_check_dirent_target(trans, dirent_iter, d, target, in_fsck);
70*9b0d00a3SKent Overstreet }
71758ea4ffSKent Overstreet 
724fcd4de0SKent Overstreet #endif /* _BCACHEFS_NAMEI_H */
73