~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to include/linux/namei.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

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