~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/namei.h

Version: ~ [ linux-5.14-rc1 ] ~ [ linux-5.13.1 ] ~ [ linux-5.12.16 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.49 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.131 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.197 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.239 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.275 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.275 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _LINUX_NAMEI_H
  2 #define _LINUX_NAMEI_H
  3 
  4 #include <linux/dcache.h>
  5 #include <linux/errno.h>
  6 #include <linux/linkage.h>
  7 #include <linux/path.h>
  8 
  9 struct vfsmount;
 10 
 11 enum { MAX_NESTED_LINKS = 8 };
 12 
 13 struct nameidata {
 14         struct path     path;
 15         struct qstr     last;
 16         struct path     root;
 17         struct inode    *inode; /* path.dentry.d_inode */
 18         unsigned int    flags;
 19         unsigned        seq;
 20         int             last_type;
 21         unsigned        depth;
 22         char *saved_names[MAX_NESTED_LINKS + 1];
 23 };
 24 
 25 /*
 26  * Type of the last component on LOOKUP_PARENT
 27  */
 28 enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
 29 
 30 /*
 31  * The bitmask for a lookup event:
 32  *  - follow links at the end
 33  *  - require a directory
 34  *  - ending slashes ok even for nonexistent files
 35  *  - internal "there are more path components" flag
 36  *  - dentry cache is untrusted; force a real lookup
 37  *  - suppress terminal automount
 38  */
 39 #define LOOKUP_FOLLOW           0x0001
 40 #define LOOKUP_DIRECTORY        0x0002
 41 #define LOOKUP_AUTOMOUNT        0x0004
 42 
 43 #define LOOKUP_PARENT           0x0010
 44 #define LOOKUP_REVAL            0x0020
 45 #define LOOKUP_RCU              0x0040
 46 
 47 /*
 48  * Intent data
 49  */
 50 #define LOOKUP_OPEN             0x0100
 51 #define LOOKUP_CREATE           0x0200
 52 #define LOOKUP_EXCL             0x0400
 53 #define LOOKUP_RENAME_TARGET    0x0800
 54 
 55 #define LOOKUP_JUMPED           0x1000
 56 #define LOOKUP_ROOT             0x2000
 57 #define LOOKUP_EMPTY            0x4000
 58 
 59 extern int user_path_at(int, const char __user *, unsigned, struct path *);
 60 extern int user_path_at_empty(int, const char __user *, unsigned, struct path *, int *empty);
 61 
 62 #define user_path(name, path) user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW, path)
 63 #define user_lpath(name, path) user_path_at(AT_FDCWD, name, 0, path)
 64 #define user_path_dir(name, path) \
 65         user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, path)
 66 
 67 extern int kern_path(const char *, unsigned, struct path *);
 68 
 69 extern struct dentry *kern_path_create(int, const char *, struct path *, unsigned int);
 70 extern struct dentry *user_path_create(int, const char __user *, struct path *, unsigned int);
 71 extern void done_path_create(struct path *, struct dentry *);
 72 extern struct dentry *kern_path_locked(const char *, struct path *);
 73 extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
 74                            const char *, unsigned int, struct path *);
 75 
 76 extern struct dentry *lookup_one_len(const char *, struct dentry *, int);
 77 
 78 extern int follow_down_one(struct path *);
 79 extern int follow_down(struct path *);
 80 extern int follow_up(struct path *);
 81 
 82 extern struct dentry *lock_rename(struct dentry *, struct dentry *);
 83 extern void unlock_rename(struct dentry *, struct dentry *);
 84 
 85 extern void nd_jump_link(struct nameidata *nd, struct path *path);
 86 
 87 static inline void nd_set_link(struct nameidata *nd, char *path)
 88 {
 89         nd->saved_names[nd->depth] = path;
 90 }
 91 
 92 static inline char *nd_get_link(struct nameidata *nd)
 93 {
 94         return nd->saved_names[nd->depth];
 95 }
 96 
 97 static inline void nd_terminate_link(void *name, size_t len, size_t maxlen)
 98 {
 99         ((char *) name)[min(len, maxlen)] = '\0';
100 }
101 
102 /**
103  * retry_estale - determine whether the caller should retry an operation
104  * @error: the error that would currently be returned
105  * @flags: flags being used for next lookup attempt
106  *
107  * Check to see if the error code was -ESTALE, and then determine whether
108  * to retry the call based on whether "flags" already has LOOKUP_REVAL set.
109  *
110  * Returns true if the caller should try the operation again.
111  */
112 static inline bool
113 retry_estale(const long error, const unsigned int flags)
114 {
115         return error == -ESTALE && !(flags & LOOKUP_REVAL);
116 }
117 
118 #endif /* _LINUX_NAMEI_H */
119 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp