diff options
-rw-r--r-- | fs/namei.c | 17 | ||||
-rw-r--r-- | include/linux/path.h | 1 |
2 files changed, 16 insertions, 2 deletions
diff --git a/fs/namei.c b/fs/namei.c index 024993535b6f..a6575ca9f9d7 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -363,6 +363,19 @@ int deny_write_access(struct file * file) | |||
363 | } | 363 | } |
364 | 364 | ||
365 | /** | 365 | /** |
366 | * path_get - get a reference to a path | ||
367 | * @path: path to get the reference to | ||
368 | * | ||
369 | * Given a path increment the reference count to the dentry and the vfsmount. | ||
370 | */ | ||
371 | void path_get(struct path *path) | ||
372 | { | ||
373 | mntget(path->mnt); | ||
374 | dget(path->dentry); | ||
375 | } | ||
376 | EXPORT_SYMBOL(path_get); | ||
377 | |||
378 | /** | ||
366 | * path_put - put a reference to a path | 379 | * path_put - put a reference to a path |
367 | * @path: path to put the reference to | 380 | * @path: path to put the reference to |
368 | * | 381 | * |
@@ -1160,8 +1173,8 @@ static int do_path_lookup(int dfd, const char *name, | |||
1160 | if (retval) | 1173 | if (retval) |
1161 | goto fput_fail; | 1174 | goto fput_fail; |
1162 | 1175 | ||
1163 | nd->path.mnt = mntget(file->f_path.mnt); | 1176 | nd->path = file->f_path; |
1164 | nd->path.dentry = dget(dentry); | 1177 | path_get(&file->f_path); |
1165 | 1178 | ||
1166 | fput_light(file, fput_needed); | 1179 | fput_light(file, fput_needed); |
1167 | } | 1180 | } |
diff --git a/include/linux/path.h b/include/linux/path.h index 4d976f959f33..915e0c382a51 100644 --- a/include/linux/path.h +++ b/include/linux/path.h | |||
@@ -9,6 +9,7 @@ struct path { | |||
9 | struct dentry *dentry; | 9 | struct dentry *dentry; |
10 | }; | 10 | }; |
11 | 11 | ||
12 | extern void path_get(struct path *); | ||
12 | extern void path_put(struct path *); | 13 | extern void path_put(struct path *); |
13 | 14 | ||
14 | #endif /* _LINUX_PATH_H */ | 15 | #endif /* _LINUX_PATH_H */ |