xref: /linux-6.15/include/linux/path.h (revision 029c3f27)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c5e725f3SJan Blunck #ifndef _LINUX_PATH_H
3c5e725f3SJan Blunck #define _LINUX_PATH_H
4c5e725f3SJan Blunck 
5c5e725f3SJan Blunck struct dentry;
6c5e725f3SJan Blunck struct vfsmount;
7c5e725f3SJan Blunck 
8c5e725f3SJan Blunck struct path {
9c5e725f3SJan Blunck 	struct vfsmount *mnt;
10c5e725f3SJan Blunck 	struct dentry *dentry;
113859a271SKees Cook } __randomize_layout;
12c5e725f3SJan Blunck 
13dcf787f3SAl Viro extern void path_get(const struct path *);
14dcf787f3SAl Viro extern void path_put(const struct path *);
151d957f9bSJan Blunck 
path_equal(const struct path * path1,const struct path * path2)168df9d1a4SMiklos Szeredi static inline int path_equal(const struct path *path1, const struct path *path2)
178df9d1a4SMiklos Szeredi {
188df9d1a4SMiklos Szeredi 	return path1->mnt == path2->mnt && path1->dentry == path2->dentry;
198df9d1a4SMiklos Szeredi }
208df9d1a4SMiklos Szeredi 
21*ff2c570eSChristian Brauner /*
22*ff2c570eSChristian Brauner  * Cleanup macro for use with __free(path_put). Avoids dereference and
23*ff2c570eSChristian Brauner  * copying @path unlike DEFINE_FREE(). path_put() will handle the empty
24*ff2c570eSChristian Brauner  * path correctly just ensure @path is initialized:
25*ff2c570eSChristian Brauner  *
26*ff2c570eSChristian Brauner  * struct path path __free(path_put) = {};
27*ff2c570eSChristian Brauner  */
28*ff2c570eSChristian Brauner #define __free_path_put path_put
29*ff2c570eSChristian Brauner 
30c5e725f3SJan Blunck #endif  /* _LINUX_PATH_H */
31