| 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | #ifndef _LINUX_PATH_H |
| 3 | #define _LINUX_PATH_H |
| 4 | |
| 5 | struct dentry; |
| 6 | struct vfsmount; |
| 7 | |
| 8 | struct path { |
| 9 | struct vfsmount *mnt; |
| 10 | struct dentry *dentry; |
| 11 | } __randomize_layout; |
| 12 | |
| 13 | extern void path_get(const struct path *); |
| 14 | extern void path_put(const struct path *); |
| 15 | |
| 16 | static inline int path_equal(const struct path *path1, const struct path *path2) |
| 17 | { |
| 18 | return path1->mnt == path2->mnt && path1->dentry == path2->dentry; |
| 19 | } |
| 20 | |
| 21 | /* |
| 22 | * Cleanup macro for use with __free(path_put). Avoids dereference and |
| 23 | * copying @path unlike DEFINE_FREE(). path_put() will handle the empty |
| 24 | * path correctly just ensure @path is initialized: |
| 25 | * |
| 26 | * struct path path __free(path_put) = {}; |
| 27 | */ |
| 28 | #define __free_path_put path_put |
| 29 | |
| 30 | #endif /* _LINUX_PATH_H */ |
| 31 | |