summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/fs.h1
-rw-r--r--include/linux/namei.h14
2 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 88337ed4f4f2..3ba1ac6cbb37 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -902,6 +902,7 @@ struct inode_operations {
struct inode *, struct dentry *);
int (*readlink) (struct dentry *, char __user *,int);
int (*follow_link) (struct dentry *, struct nameidata *);
+ void (*put_link) (struct dentry *, struct nameidata *);
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int, struct nameidata *);
int (*setattr) (struct dentry *, struct iattr *);
diff --git a/include/linux/namei.h b/include/linux/namei.h
index 4117cd90a345..adcafdec8ee7 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -10,12 +10,16 @@ struct open_intent {
int create_mode;
};
+enum { MAX_NESTED_LINKS = 5 };
+
struct nameidata {
struct dentry *dentry;
struct vfsmount *mnt;
struct qstr last;
unsigned int flags;
int last_type;
+ unsigned depth;
+ char *saved_names[MAX_NESTED_LINKS + 1];
/* Intent data */
union {
@@ -67,4 +71,14 @@ extern int follow_up(struct vfsmount **, struct dentry **);
extern struct dentry *lock_rename(struct dentry *, struct dentry *);
extern void unlock_rename(struct dentry *, struct dentry *);
+static inline void nd_set_link(struct nameidata *nd, char *path)
+{
+ nd->saved_names[nd->depth] = path;
+}
+
+static inline char *nd_get_link(struct nameidata *nd)
+{
+ return nd->saved_names[nd->depth];
+}
+
#endif /* _LINUX_NAMEI_H */