Remove path_release_on_umount()
[sfrench/cifs-2.6.git] / fs / namei.c
1 /*
2  *  linux/fs/namei.c
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  */
6
7 /*
8  * Some corrections by tytso.
9  */
10
11 /* [Feb 1997 T. Schoebel-Theuer] Complete rewrite of the pathname
12  * lookup logic.
13  */
14 /* [Feb-Apr 2000, AV] Rewrite to the new namespace architecture.
15  */
16
17 #include <linux/init.h>
18 #include <linux/module.h>
19 #include <linux/slab.h>
20 #include <linux/fs.h>
21 #include <linux/namei.h>
22 #include <linux/quotaops.h>
23 #include <linux/pagemap.h>
24 #include <linux/fsnotify.h>
25 #include <linux/personality.h>
26 #include <linux/security.h>
27 #include <linux/syscalls.h>
28 #include <linux/mount.h>
29 #include <linux/audit.h>
30 #include <linux/capability.h>
31 #include <linux/file.h>
32 #include <linux/fcntl.h>
33 #include <asm/namei.h>
34 #include <asm/uaccess.h>
35
36 #define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
37
38 /* [Feb-1997 T. Schoebel-Theuer]
39  * Fundamental changes in the pathname lookup mechanisms (namei)
40  * were necessary because of omirr.  The reason is that omirr needs
41  * to know the _real_ pathname, not the user-supplied one, in case
42  * of symlinks (and also when transname replacements occur).
43  *
44  * The new code replaces the old recursive symlink resolution with
45  * an iterative one (in case of non-nested symlink chains).  It does
46  * this with calls to <fs>_follow_link().
47  * As a side effect, dir_namei(), _namei() and follow_link() are now 
48  * replaced with a single function lookup_dentry() that can handle all 
49  * the special cases of the former code.
50  *
51  * With the new dcache, the pathname is stored at each inode, at least as
52  * long as the refcount of the inode is positive.  As a side effect, the
53  * size of the dcache depends on the inode cache and thus is dynamic.
54  *
55  * [29-Apr-1998 C. Scott Ananian] Updated above description of symlink
56  * resolution to correspond with current state of the code.
57  *
58  * Note that the symlink resolution is not *completely* iterative.
59  * There is still a significant amount of tail- and mid- recursion in
60  * the algorithm.  Also, note that <fs>_readlink() is not used in
61  * lookup_dentry(): lookup_dentry() on the result of <fs>_readlink()
62  * may return different results than <fs>_follow_link().  Many virtual
63  * filesystems (including /proc) exhibit this behavior.
64  */
65
66 /* [24-Feb-97 T. Schoebel-Theuer] Side effects caused by new implementation:
67  * New symlink semantics: when open() is called with flags O_CREAT | O_EXCL
68  * and the name already exists in form of a symlink, try to create the new
69  * name indicated by the symlink. The old code always complained that the
70  * name already exists, due to not following the symlink even if its target
71  * is nonexistent.  The new semantics affects also mknod() and link() when
72  * the name is a symlink pointing to a non-existant name.
73  *
74  * I don't know which semantics is the right one, since I have no access
75  * to standards. But I found by trial that HP-UX 9.0 has the full "new"
76  * semantics implemented, while SunOS 4.1.1 and Solaris (SunOS 5.4) have the
77  * "old" one. Personally, I think the new semantics is much more logical.
78  * Note that "ln old new" where "new" is a symlink pointing to a non-existing
79  * file does succeed in both HP-UX and SunOs, but not in Solaris
80  * and in the old Linux semantics.
81  */
82
83 /* [16-Dec-97 Kevin Buhr] For security reasons, we change some symlink
84  * semantics.  See the comments in "open_namei" and "do_link" below.
85  *
86  * [10-Sep-98 Alan Modra] Another symlink change.
87  */
88
89 /* [Feb-Apr 2000 AV] Complete rewrite. Rules for symlinks:
90  *      inside the path - always follow.
91  *      in the last component in creation/removal/renaming - never follow.
92  *      if LOOKUP_FOLLOW passed - follow.
93  *      if the pathname has trailing slashes - follow.
94  *      otherwise - don't follow.
95  * (applied in that order).
96  *
97  * [Jun 2000 AV] Inconsistent behaviour of open() in case if flags==O_CREAT
98  * restored for 2.4. This is the last surviving part of old 4.2BSD bug.
99  * During the 2.4 we need to fix the userland stuff depending on it -
100  * hopefully we will be able to get rid of that wart in 2.5. So far only
101  * XEmacs seems to be relying on it...
102  */
103 /*
104  * [Sep 2001 AV] Single-semaphore locking scheme (kudos to David Holland)
105  * implemented.  Let's see if raised priority of ->s_vfs_rename_mutex gives
106  * any extra contention...
107  */
108
109 static int link_path_walk(const char *name, struct nameidata *nd);
110
111 /* In order to reduce some races, while at the same time doing additional
112  * checking and hopefully speeding things up, we copy filenames to the
113  * kernel data space before using them..
114  *
115  * POSIX.1 2.4: an empty pathname is invalid (ENOENT).
116  * PATH_MAX includes the nul terminator --RR.
117  */
118 static int do_getname(const char __user *filename, char *page)
119 {
120         int retval;
121         unsigned long len = PATH_MAX;
122
123         if (!segment_eq(get_fs(), KERNEL_DS)) {
124                 if ((unsigned long) filename >= TASK_SIZE)
125                         return -EFAULT;
126                 if (TASK_SIZE - (unsigned long) filename < PATH_MAX)
127                         len = TASK_SIZE - (unsigned long) filename;
128         }
129
130         retval = strncpy_from_user(page, filename, len);
131         if (retval > 0) {
132                 if (retval < len)
133                         return 0;
134                 return -ENAMETOOLONG;
135         } else if (!retval)
136                 retval = -ENOENT;
137         return retval;
138 }
139
140 char * getname(const char __user * filename)
141 {
142         char *tmp, *result;
143
144         result = ERR_PTR(-ENOMEM);
145         tmp = __getname();
146         if (tmp)  {
147                 int retval = do_getname(filename, tmp);
148
149                 result = tmp;
150                 if (retval < 0) {
151                         __putname(tmp);
152                         result = ERR_PTR(retval);
153                 }
154         }
155         audit_getname(result);
156         return result;
157 }
158
159 #ifdef CONFIG_AUDITSYSCALL
160 void putname(const char *name)
161 {
162         if (unlikely(!audit_dummy_context()))
163                 audit_putname(name);
164         else
165                 __putname(name);
166 }
167 EXPORT_SYMBOL(putname);
168 #endif
169
170
171 /**
172  * generic_permission  -  check for access rights on a Posix-like filesystem
173  * @inode:      inode to check access rights for
174  * @mask:       right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
175  * @check_acl:  optional callback to check for Posix ACLs
176  *
177  * Used to check for read/write/execute permissions on a file.
178  * We use "fsuid" for this, letting us set arbitrary permissions
179  * for filesystem access without changing the "normal" uids which
180  * are used for other things..
181  */
182 int generic_permission(struct inode *inode, int mask,
183                 int (*check_acl)(struct inode *inode, int mask))
184 {
185         umode_t                 mode = inode->i_mode;
186
187         if (current->fsuid == inode->i_uid)
188                 mode >>= 6;
189         else {
190                 if (IS_POSIXACL(inode) && (mode & S_IRWXG) && check_acl) {
191                         int error = check_acl(inode, mask);
192                         if (error == -EACCES)
193                                 goto check_capabilities;
194                         else if (error != -EAGAIN)
195                                 return error;
196                 }
197
198                 if (in_group_p(inode->i_gid))
199                         mode >>= 3;
200         }
201
202         /*
203          * If the DACs are ok we don't need any capability check.
204          */
205         if (((mode & mask & (MAY_READ|MAY_WRITE|MAY_EXEC)) == mask))
206                 return 0;
207
208  check_capabilities:
209         /*
210          * Read/write DACs are always overridable.
211          * Executable DACs are overridable if at least one exec bit is set.
212          */
213         if (!(mask & MAY_EXEC) ||
214             (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode))
215                 if (capable(CAP_DAC_OVERRIDE))
216                         return 0;
217
218         /*
219          * Searching includes executable on directories, else just read.
220          */
221         if (mask == MAY_READ || (S_ISDIR(inode->i_mode) && !(mask & MAY_WRITE)))
222                 if (capable(CAP_DAC_READ_SEARCH))
223                         return 0;
224
225         return -EACCES;
226 }
227
228 int permission(struct inode *inode, int mask, struct nameidata *nd)
229 {
230         int retval, submask;
231         struct vfsmount *mnt = NULL;
232
233         if (nd)
234                 mnt = nd->mnt;
235
236         if (mask & MAY_WRITE) {
237                 umode_t mode = inode->i_mode;
238
239                 /*
240                  * Nobody gets write access to a read-only fs.
241                  */
242                 if (IS_RDONLY(inode) &&
243                     (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
244                         return -EROFS;
245
246                 /*
247                  * Nobody gets write access to an immutable file.
248                  */
249                 if (IS_IMMUTABLE(inode))
250                         return -EACCES;
251         }
252
253         if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
254                 /*
255                  * MAY_EXEC on regular files is denied if the fs is mounted
256                  * with the "noexec" flag.
257                  */
258                 if (mnt && (mnt->mnt_flags & MNT_NOEXEC))
259                         return -EACCES;
260         }
261
262         /* Ordinary permission routines do not understand MAY_APPEND. */
263         submask = mask & ~MAY_APPEND;
264         if (inode->i_op && inode->i_op->permission) {
265                 retval = inode->i_op->permission(inode, submask, nd);
266                 if (!retval) {
267                         /*
268                          * Exec permission on a regular file is denied if none
269                          * of the execute bits are set.
270                          *
271                          * This check should be done by the ->permission()
272                          * method.
273                          */
274                         if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode) &&
275                             !(inode->i_mode & S_IXUGO))
276                                 return -EACCES;
277                 }
278         } else {
279                 retval = generic_permission(inode, submask, NULL);
280         }
281         if (retval)
282                 return retval;
283
284         return security_inode_permission(inode, mask, nd);
285 }
286
287 /**
288  * vfs_permission  -  check for access rights to a given path
289  * @nd:         lookup result that describes the path
290  * @mask:       right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
291  *
292  * Used to check for read/write/execute permissions on a path.
293  * We use "fsuid" for this, letting us set arbitrary permissions
294  * for filesystem access without changing the "normal" uids which
295  * are used for other things.
296  */
297 int vfs_permission(struct nameidata *nd, int mask)
298 {
299         return permission(nd->dentry->d_inode, mask, nd);
300 }
301
302 /**
303  * file_permission  -  check for additional access rights to a given file
304  * @file:       file to check access rights for
305  * @mask:       right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
306  *
307  * Used to check for read/write/execute permissions on an already opened
308  * file.
309  *
310  * Note:
311  *      Do not use this function in new code.  All access checks should
312  *      be done using vfs_permission().
313  */
314 int file_permission(struct file *file, int mask)
315 {
316         return permission(file->f_path.dentry->d_inode, mask, NULL);
317 }
318
319 /*
320  * get_write_access() gets write permission for a file.
321  * put_write_access() releases this write permission.
322  * This is used for regular files.
323  * We cannot support write (and maybe mmap read-write shared) accesses and
324  * MAP_DENYWRITE mmappings simultaneously. The i_writecount field of an inode
325  * can have the following values:
326  * 0: no writers, no VM_DENYWRITE mappings
327  * < 0: (-i_writecount) vm_area_structs with VM_DENYWRITE set exist
328  * > 0: (i_writecount) users are writing to the file.
329  *
330  * Normally we operate on that counter with atomic_{inc,dec} and it's safe
331  * except for the cases where we don't hold i_writecount yet. Then we need to
332  * use {get,deny}_write_access() - these functions check the sign and refuse
333  * to do the change if sign is wrong. Exclusion between them is provided by
334  * the inode->i_lock spinlock.
335  */
336
337 int get_write_access(struct inode * inode)
338 {
339         spin_lock(&inode->i_lock);
340         if (atomic_read(&inode->i_writecount) < 0) {
341                 spin_unlock(&inode->i_lock);
342                 return -ETXTBSY;
343         }
344         atomic_inc(&inode->i_writecount);
345         spin_unlock(&inode->i_lock);
346
347         return 0;
348 }
349
350 int deny_write_access(struct file * file)
351 {
352         struct inode *inode = file->f_path.dentry->d_inode;
353
354         spin_lock(&inode->i_lock);
355         if (atomic_read(&inode->i_writecount) > 0) {
356                 spin_unlock(&inode->i_lock);
357                 return -ETXTBSY;
358         }
359         atomic_dec(&inode->i_writecount);
360         spin_unlock(&inode->i_lock);
361
362         return 0;
363 }
364
365 void path_release(struct nameidata *nd)
366 {
367         dput(nd->dentry);
368         mntput(nd->mnt);
369 }
370
371 /**
372  * release_open_intent - free up open intent resources
373  * @nd: pointer to nameidata
374  */
375 void release_open_intent(struct nameidata *nd)
376 {
377         if (nd->intent.open.file->f_path.dentry == NULL)
378                 put_filp(nd->intent.open.file);
379         else
380                 fput(nd->intent.open.file);
381 }
382
383 static inline struct dentry *
384 do_revalidate(struct dentry *dentry, struct nameidata *nd)
385 {
386         int status = dentry->d_op->d_revalidate(dentry, nd);
387         if (unlikely(status <= 0)) {
388                 /*
389                  * The dentry failed validation.
390                  * If d_revalidate returned 0 attempt to invalidate
391                  * the dentry otherwise d_revalidate is asking us
392                  * to return a fail status.
393                  */
394                 if (!status) {
395                         if (!d_invalidate(dentry)) {
396                                 dput(dentry);
397                                 dentry = NULL;
398                         }
399                 } else {
400                         dput(dentry);
401                         dentry = ERR_PTR(status);
402                 }
403         }
404         return dentry;
405 }
406
407 /*
408  * Internal lookup() using the new generic dcache.
409  * SMP-safe
410  */
411 static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, struct nameidata *nd)
412 {
413         struct dentry * dentry = __d_lookup(parent, name);
414
415         /* lockess __d_lookup may fail due to concurrent d_move() 
416          * in some unrelated directory, so try with d_lookup
417          */
418         if (!dentry)
419                 dentry = d_lookup(parent, name);
420
421         if (dentry && dentry->d_op && dentry->d_op->d_revalidate)
422                 dentry = do_revalidate(dentry, nd);
423
424         return dentry;
425 }
426
427 /*
428  * Short-cut version of permission(), for calling by
429  * path_walk(), when dcache lock is held.  Combines parts
430  * of permission() and generic_permission(), and tests ONLY for
431  * MAY_EXEC permission.
432  *
433  * If appropriate, check DAC only.  If not appropriate, or
434  * short-cut DAC fails, then call permission() to do more
435  * complete permission check.
436  */
437 static int exec_permission_lite(struct inode *inode,
438                                        struct nameidata *nd)
439 {
440         umode_t mode = inode->i_mode;
441
442         if (inode->i_op && inode->i_op->permission)
443                 return -EAGAIN;
444
445         if (current->fsuid == inode->i_uid)
446                 mode >>= 6;
447         else if (in_group_p(inode->i_gid))
448                 mode >>= 3;
449
450         if (mode & MAY_EXEC)
451                 goto ok;
452
453         if ((inode->i_mode & S_IXUGO) && capable(CAP_DAC_OVERRIDE))
454                 goto ok;
455
456         if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_OVERRIDE))
457                 goto ok;
458
459         if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_READ_SEARCH))
460                 goto ok;
461
462         return -EACCES;
463 ok:
464         return security_inode_permission(inode, MAY_EXEC, nd);
465 }
466
467 /*
468  * This is called when everything else fails, and we actually have
469  * to go to the low-level filesystem to find out what we should do..
470  *
471  * We get the directory semaphore, and after getting that we also
472  * make sure that nobody added the entry to the dcache in the meantime..
473  * SMP-safe
474  */
475 static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, struct nameidata *nd)
476 {
477         struct dentry * result;
478         struct inode *dir = parent->d_inode;
479
480         mutex_lock(&dir->i_mutex);
481         /*
482          * First re-do the cached lookup just in case it was created
483          * while we waited for the directory semaphore..
484          *
485          * FIXME! This could use version numbering or similar to
486          * avoid unnecessary cache lookups.
487          *
488          * The "dcache_lock" is purely to protect the RCU list walker
489          * from concurrent renames at this point (we mustn't get false
490          * negatives from the RCU list walk here, unlike the optimistic
491          * fast walk).
492          *
493          * so doing d_lookup() (with seqlock), instead of lockfree __d_lookup
494          */
495         result = d_lookup(parent, name);
496         if (!result) {
497                 struct dentry * dentry = d_alloc(parent, name);
498                 result = ERR_PTR(-ENOMEM);
499                 if (dentry) {
500                         result = dir->i_op->lookup(dir, dentry, nd);
501                         if (result)
502                                 dput(dentry);
503                         else
504                                 result = dentry;
505                 }
506                 mutex_unlock(&dir->i_mutex);
507                 return result;
508         }
509
510         /*
511          * Uhhuh! Nasty case: the cache was re-populated while
512          * we waited on the semaphore. Need to revalidate.
513          */
514         mutex_unlock(&dir->i_mutex);
515         if (result->d_op && result->d_op->d_revalidate) {
516                 result = do_revalidate(result, nd);
517                 if (!result)
518                         result = ERR_PTR(-ENOENT);
519         }
520         return result;
521 }
522
523 static int __emul_lookup_dentry(const char *, struct nameidata *);
524
525 /* SMP-safe */
526 static __always_inline int
527 walk_init_root(const char *name, struct nameidata *nd)
528 {
529         struct fs_struct *fs = current->fs;
530
531         read_lock(&fs->lock);
532         if (fs->altroot && !(nd->flags & LOOKUP_NOALT)) {
533                 nd->mnt = mntget(fs->altrootmnt);
534                 nd->dentry = dget(fs->altroot);
535                 read_unlock(&fs->lock);
536                 if (__emul_lookup_dentry(name,nd))
537                         return 0;
538                 read_lock(&fs->lock);
539         }
540         nd->mnt = mntget(fs->rootmnt);
541         nd->dentry = dget(fs->root);
542         read_unlock(&fs->lock);
543         return 1;
544 }
545
546 static __always_inline int __vfs_follow_link(struct nameidata *nd, const char *link)
547 {
548         int res = 0;
549         char *name;
550         if (IS_ERR(link))
551                 goto fail;
552
553         if (*link == '/') {
554                 path_release(nd);
555                 if (!walk_init_root(link, nd))
556                         /* weird __emul_prefix() stuff did it */
557                         goto out;
558         }
559         res = link_path_walk(link, nd);
560 out:
561         if (nd->depth || res || nd->last_type!=LAST_NORM)
562                 return res;
563         /*
564          * If it is an iterative symlinks resolution in open_namei() we
565          * have to copy the last component. And all that crap because of
566          * bloody create() on broken symlinks. Furrfu...
567          */
568         name = __getname();
569         if (unlikely(!name)) {
570                 path_release(nd);
571                 return -ENOMEM;
572         }
573         strcpy(name, nd->last.name);
574         nd->last.name = name;
575         return 0;
576 fail:
577         path_release(nd);
578         return PTR_ERR(link);
579 }
580
581 static inline void dput_path(struct path *path, struct nameidata *nd)
582 {
583         dput(path->dentry);
584         if (path->mnt != nd->mnt)
585                 mntput(path->mnt);
586 }
587
588 static inline void path_to_nameidata(struct path *path, struct nameidata *nd)
589 {
590         dput(nd->dentry);
591         if (nd->mnt != path->mnt)
592                 mntput(nd->mnt);
593         nd->mnt = path->mnt;
594         nd->dentry = path->dentry;
595 }
596
597 static __always_inline int __do_follow_link(struct path *path, struct nameidata *nd)
598 {
599         int error;
600         void *cookie;
601         struct dentry *dentry = path->dentry;
602
603         touch_atime(path->mnt, dentry);
604         nd_set_link(nd, NULL);
605
606         if (path->mnt != nd->mnt) {
607                 path_to_nameidata(path, nd);
608                 dget(dentry);
609         }
610         mntget(path->mnt);
611         cookie = dentry->d_inode->i_op->follow_link(dentry, nd);
612         error = PTR_ERR(cookie);
613         if (!IS_ERR(cookie)) {
614                 char *s = nd_get_link(nd);
615                 error = 0;
616                 if (s)
617                         error = __vfs_follow_link(nd, s);
618                 if (dentry->d_inode->i_op->put_link)
619                         dentry->d_inode->i_op->put_link(dentry, nd, cookie);
620         }
621         dput(dentry);
622         mntput(path->mnt);
623
624         return error;
625 }
626
627 /*
628  * This limits recursive symlink follows to 8, while
629  * limiting consecutive symlinks to 40.
630  *
631  * Without that kind of total limit, nasty chains of consecutive
632  * symlinks can cause almost arbitrarily long lookups. 
633  */
634 static inline int do_follow_link(struct path *path, struct nameidata *nd)
635 {
636         int err = -ELOOP;
637         if (current->link_count >= MAX_NESTED_LINKS)
638                 goto loop;
639         if (current->total_link_count >= 40)
640                 goto loop;
641         BUG_ON(nd->depth >= MAX_NESTED_LINKS);
642         cond_resched();
643         err = security_inode_follow_link(path->dentry, nd);
644         if (err)
645                 goto loop;
646         current->link_count++;
647         current->total_link_count++;
648         nd->depth++;
649         err = __do_follow_link(path, nd);
650         current->link_count--;
651         nd->depth--;
652         return err;
653 loop:
654         dput_path(path, nd);
655         path_release(nd);
656         return err;
657 }
658
659 int follow_up(struct vfsmount **mnt, struct dentry **dentry)
660 {
661         struct vfsmount *parent;
662         struct dentry *mountpoint;
663         spin_lock(&vfsmount_lock);
664         parent=(*mnt)->mnt_parent;
665         if (parent == *mnt) {
666                 spin_unlock(&vfsmount_lock);
667                 return 0;
668         }
669         mntget(parent);
670         mountpoint=dget((*mnt)->mnt_mountpoint);
671         spin_unlock(&vfsmount_lock);
672         dput(*dentry);
673         *dentry = mountpoint;
674         mntput(*mnt);
675         *mnt = parent;
676         return 1;
677 }
678
679 /* no need for dcache_lock, as serialization is taken care in
680  * namespace.c
681  */
682 static int __follow_mount(struct path *path)
683 {
684         int res = 0;
685         while (d_mountpoint(path->dentry)) {
686                 struct vfsmount *mounted = lookup_mnt(path->mnt, path->dentry);
687                 if (!mounted)
688                         break;
689                 dput(path->dentry);
690                 if (res)
691                         mntput(path->mnt);
692                 path->mnt = mounted;
693                 path->dentry = dget(mounted->mnt_root);
694                 res = 1;
695         }
696         return res;
697 }
698
699 static void follow_mount(struct vfsmount **mnt, struct dentry **dentry)
700 {
701         while (d_mountpoint(*dentry)) {
702                 struct vfsmount *mounted = lookup_mnt(*mnt, *dentry);
703                 if (!mounted)
704                         break;
705                 dput(*dentry);
706                 mntput(*mnt);
707                 *mnt = mounted;
708                 *dentry = dget(mounted->mnt_root);
709         }
710 }
711
712 /* no need for dcache_lock, as serialization is taken care in
713  * namespace.c
714  */
715 int follow_down(struct vfsmount **mnt, struct dentry **dentry)
716 {
717         struct vfsmount *mounted;
718
719         mounted = lookup_mnt(*mnt, *dentry);
720         if (mounted) {
721                 dput(*dentry);
722                 mntput(*mnt);
723                 *mnt = mounted;
724                 *dentry = dget(mounted->mnt_root);
725                 return 1;
726         }
727         return 0;
728 }
729
730 static __always_inline void follow_dotdot(struct nameidata *nd)
731 {
732         struct fs_struct *fs = current->fs;
733
734         while(1) {
735                 struct vfsmount *parent;
736                 struct dentry *old = nd->dentry;
737
738                 read_lock(&fs->lock);
739                 if (nd->dentry == fs->root &&
740                     nd->mnt == fs->rootmnt) {
741                         read_unlock(&fs->lock);
742                         break;
743                 }
744                 read_unlock(&fs->lock);
745                 spin_lock(&dcache_lock);
746                 if (nd->dentry != nd->mnt->mnt_root) {
747                         nd->dentry = dget(nd->dentry->d_parent);
748                         spin_unlock(&dcache_lock);
749                         dput(old);
750                         break;
751                 }
752                 spin_unlock(&dcache_lock);
753                 spin_lock(&vfsmount_lock);
754                 parent = nd->mnt->mnt_parent;
755                 if (parent == nd->mnt) {
756                         spin_unlock(&vfsmount_lock);
757                         break;
758                 }
759                 mntget(parent);
760                 nd->dentry = dget(nd->mnt->mnt_mountpoint);
761                 spin_unlock(&vfsmount_lock);
762                 dput(old);
763                 mntput(nd->mnt);
764                 nd->mnt = parent;
765         }
766         follow_mount(&nd->mnt, &nd->dentry);
767 }
768
769 /*
770  *  It's more convoluted than I'd like it to be, but... it's still fairly
771  *  small and for now I'd prefer to have fast path as straight as possible.
772  *  It _is_ time-critical.
773  */
774 static int do_lookup(struct nameidata *nd, struct qstr *name,
775                      struct path *path)
776 {
777         struct vfsmount *mnt = nd->mnt;
778         struct dentry *dentry = __d_lookup(nd->dentry, name);
779
780         if (!dentry)
781                 goto need_lookup;
782         if (dentry->d_op && dentry->d_op->d_revalidate)
783                 goto need_revalidate;
784 done:
785         path->mnt = mnt;
786         path->dentry = dentry;
787         __follow_mount(path);
788         return 0;
789
790 need_lookup:
791         dentry = real_lookup(nd->dentry, name, nd);
792         if (IS_ERR(dentry))
793                 goto fail;
794         goto done;
795
796 need_revalidate:
797         dentry = do_revalidate(dentry, nd);
798         if (!dentry)
799                 goto need_lookup;
800         if (IS_ERR(dentry))
801                 goto fail;
802         goto done;
803
804 fail:
805         return PTR_ERR(dentry);
806 }
807
808 /*
809  * Name resolution.
810  * This is the basic name resolution function, turning a pathname into
811  * the final dentry. We expect 'base' to be positive and a directory.
812  *
813  * Returns 0 and nd will have valid dentry and mnt on success.
814  * Returns error and drops reference to input namei data on failure.
815  */
816 static int __link_path_walk(const char *name, struct nameidata *nd)
817 {
818         struct path next;
819         struct inode *inode;
820         int err;
821         unsigned int lookup_flags = nd->flags;
822         
823         while (*name=='/')
824                 name++;
825         if (!*name)
826                 goto return_reval;
827
828         inode = nd->dentry->d_inode;
829         if (nd->depth)
830                 lookup_flags = LOOKUP_FOLLOW | (nd->flags & LOOKUP_CONTINUE);
831
832         /* At this point we know we have a real path component. */
833         for(;;) {
834                 unsigned long hash;
835                 struct qstr this;
836                 unsigned int c;
837
838                 nd->flags |= LOOKUP_CONTINUE;
839                 err = exec_permission_lite(inode, nd);
840                 if (err == -EAGAIN)
841                         err = vfs_permission(nd, MAY_EXEC);
842                 if (err)
843                         break;
844
845                 this.name = name;
846                 c = *(const unsigned char *)name;
847
848                 hash = init_name_hash();
849                 do {
850                         name++;
851                         hash = partial_name_hash(c, hash);
852                         c = *(const unsigned char *)name;
853                 } while (c && (c != '/'));
854                 this.len = name - (const char *) this.name;
855                 this.hash = end_name_hash(hash);
856
857                 /* remove trailing slashes? */
858                 if (!c)
859                         goto last_component;
860                 while (*++name == '/');
861                 if (!*name)
862                         goto last_with_slashes;
863
864                 /*
865                  * "." and ".." are special - ".." especially so because it has
866                  * to be able to know about the current root directory and
867                  * parent relationships.
868                  */
869                 if (this.name[0] == '.') switch (this.len) {
870                         default:
871                                 break;
872                         case 2: 
873                                 if (this.name[1] != '.')
874                                         break;
875                                 follow_dotdot(nd);
876                                 inode = nd->dentry->d_inode;
877                                 /* fallthrough */
878                         case 1:
879                                 continue;
880                 }
881                 /*
882                  * See if the low-level filesystem might want
883                  * to use its own hash..
884                  */
885                 if (nd->dentry->d_op && nd->dentry->d_op->d_hash) {
886                         err = nd->dentry->d_op->d_hash(nd->dentry, &this);
887                         if (err < 0)
888                                 break;
889                 }
890                 /* This does the actual lookups.. */
891                 err = do_lookup(nd, &this, &next);
892                 if (err)
893                         break;
894
895                 err = -ENOENT;
896                 inode = next.dentry->d_inode;
897                 if (!inode)
898                         goto out_dput;
899                 err = -ENOTDIR; 
900                 if (!inode->i_op)
901                         goto out_dput;
902
903                 if (inode->i_op->follow_link) {
904                         err = do_follow_link(&next, nd);
905                         if (err)
906                                 goto return_err;
907                         err = -ENOENT;
908                         inode = nd->dentry->d_inode;
909                         if (!inode)
910                                 break;
911                         err = -ENOTDIR; 
912                         if (!inode->i_op)
913                                 break;
914                 } else
915                         path_to_nameidata(&next, nd);
916                 err = -ENOTDIR; 
917                 if (!inode->i_op->lookup)
918                         break;
919                 continue;
920                 /* here ends the main loop */
921
922 last_with_slashes:
923                 lookup_flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
924 last_component:
925                 /* Clear LOOKUP_CONTINUE iff it was previously unset */
926                 nd->flags &= lookup_flags | ~LOOKUP_CONTINUE;
927                 if (lookup_flags & LOOKUP_PARENT)
928                         goto lookup_parent;
929                 if (this.name[0] == '.') switch (this.len) {
930                         default:
931                                 break;
932                         case 2: 
933                                 if (this.name[1] != '.')
934                                         break;
935                                 follow_dotdot(nd);
936                                 inode = nd->dentry->d_inode;
937                                 /* fallthrough */
938                         case 1:
939                                 goto return_reval;
940                 }
941                 if (nd->dentry->d_op && nd->dentry->d_op->d_hash) {
942                         err = nd->dentry->d_op->d_hash(nd->dentry, &this);
943                         if (err < 0)
944                                 break;
945                 }
946                 err = do_lookup(nd, &this, &next);
947                 if (err)
948                         break;
949                 inode = next.dentry->d_inode;
950                 if ((lookup_flags & LOOKUP_FOLLOW)
951                     && inode && inode->i_op && inode->i_op->follow_link) {
952                         err = do_follow_link(&next, nd);
953                         if (err)
954                                 goto return_err;
955                         inode = nd->dentry->d_inode;
956                 } else
957                         path_to_nameidata(&next, nd);
958                 err = -ENOENT;
959                 if (!inode)
960                         break;
961                 if (lookup_flags & LOOKUP_DIRECTORY) {
962                         err = -ENOTDIR; 
963                         if (!inode->i_op || !inode->i_op->lookup)
964                                 break;
965                 }
966                 goto return_base;
967 lookup_parent:
968                 nd->last = this;
969                 nd->last_type = LAST_NORM;
970                 if (this.name[0] != '.')
971                         goto return_base;
972                 if (this.len == 1)
973                         nd->last_type = LAST_DOT;
974                 else if (this.len == 2 && this.name[1] == '.')
975                         nd->last_type = LAST_DOTDOT;
976                 else
977                         goto return_base;
978 return_reval:
979                 /*
980                  * We bypassed the ordinary revalidation routines.
981                  * We may need to check the cached dentry for staleness.
982                  */
983                 if (nd->dentry && nd->dentry->d_sb &&
984                     (nd->dentry->d_sb->s_type->fs_flags & FS_REVAL_DOT)) {
985                         err = -ESTALE;
986                         /* Note: we do not d_invalidate() */
987                         if (!nd->dentry->d_op->d_revalidate(nd->dentry, nd))
988                                 break;
989                 }
990 return_base:
991                 return 0;
992 out_dput:
993                 dput_path(&next, nd);
994                 break;
995         }
996         path_release(nd);
997 return_err:
998         return err;
999 }
1000
1001 /*
1002  * Wrapper to retry pathname resolution whenever the underlying
1003  * file system returns an ESTALE.
1004  *
1005  * Retry the whole path once, forcing real lookup requests
1006  * instead of relying on the dcache.
1007  */
1008 static int link_path_walk(const char *name, struct nameidata *nd)
1009 {
1010         struct nameidata save = *nd;
1011         int result;
1012
1013         /* make sure the stuff we saved doesn't go away */
1014         dget(save.dentry);
1015         mntget(save.mnt);
1016
1017         result = __link_path_walk(name, nd);
1018         if (result == -ESTALE) {
1019                 *nd = save;
1020                 dget(nd->dentry);
1021                 mntget(nd->mnt);
1022                 nd->flags |= LOOKUP_REVAL;
1023                 result = __link_path_walk(name, nd);
1024         }
1025
1026         dput(save.dentry);
1027         mntput(save.mnt);
1028
1029         return result;
1030 }
1031
1032 static int path_walk(const char *name, struct nameidata *nd)
1033 {
1034         current->total_link_count = 0;
1035         return link_path_walk(name, nd);
1036 }
1037
1038 /* 
1039  * SMP-safe: Returns 1 and nd will have valid dentry and mnt, if
1040  * everything is done. Returns 0 and drops input nd, if lookup failed;
1041  */
1042 static int __emul_lookup_dentry(const char *name, struct nameidata *nd)
1043 {
1044         if (path_walk(name, nd))
1045                 return 0;               /* something went wrong... */
1046
1047         if (!nd->dentry->d_inode || S_ISDIR(nd->dentry->d_inode->i_mode)) {
1048                 struct dentry *old_dentry = nd->dentry;
1049                 struct vfsmount *old_mnt = nd->mnt;
1050                 struct qstr last = nd->last;
1051                 int last_type = nd->last_type;
1052                 struct fs_struct *fs = current->fs;
1053
1054                 /*
1055                  * NAME was not found in alternate root or it's a directory.
1056                  * Try to find it in the normal root:
1057                  */
1058                 nd->last_type = LAST_ROOT;
1059                 read_lock(&fs->lock);
1060                 nd->mnt = mntget(fs->rootmnt);
1061                 nd->dentry = dget(fs->root);
1062                 read_unlock(&fs->lock);
1063                 if (path_walk(name, nd) == 0) {
1064                         if (nd->dentry->d_inode) {
1065                                 dput(old_dentry);
1066                                 mntput(old_mnt);
1067                                 return 1;
1068                         }
1069                         path_release(nd);
1070                 }
1071                 nd->dentry = old_dentry;
1072                 nd->mnt = old_mnt;
1073                 nd->last = last;
1074                 nd->last_type = last_type;
1075         }
1076         return 1;
1077 }
1078
1079 void set_fs_altroot(void)
1080 {
1081         char *emul = __emul_prefix();
1082         struct nameidata nd;
1083         struct vfsmount *mnt = NULL, *oldmnt;
1084         struct dentry *dentry = NULL, *olddentry;
1085         int err;
1086         struct fs_struct *fs = current->fs;
1087
1088         if (!emul)
1089                 goto set_it;
1090         err = path_lookup(emul, LOOKUP_FOLLOW|LOOKUP_DIRECTORY|LOOKUP_NOALT, &nd);
1091         if (!err) {
1092                 mnt = nd.mnt;
1093                 dentry = nd.dentry;
1094         }
1095 set_it:
1096         write_lock(&fs->lock);
1097         oldmnt = fs->altrootmnt;
1098         olddentry = fs->altroot;
1099         fs->altrootmnt = mnt;
1100         fs->altroot = dentry;
1101         write_unlock(&fs->lock);
1102         if (olddentry) {
1103                 dput(olddentry);
1104                 mntput(oldmnt);
1105         }
1106 }
1107
1108 /* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
1109 static int do_path_lookup(int dfd, const char *name,
1110                                 unsigned int flags, struct nameidata *nd)
1111 {
1112         int retval = 0;
1113         int fput_needed;
1114         struct file *file;
1115         struct fs_struct *fs = current->fs;
1116
1117         nd->last_type = LAST_ROOT; /* if there are only slashes... */
1118         nd->flags = flags;
1119         nd->depth = 0;
1120
1121         if (*name=='/') {
1122                 read_lock(&fs->lock);
1123                 if (fs->altroot && !(nd->flags & LOOKUP_NOALT)) {
1124                         nd->mnt = mntget(fs->altrootmnt);
1125                         nd->dentry = dget(fs->altroot);
1126                         read_unlock(&fs->lock);
1127                         if (__emul_lookup_dentry(name,nd))
1128                                 goto out; /* found in altroot */
1129                         read_lock(&fs->lock);
1130                 }
1131                 nd->mnt = mntget(fs->rootmnt);
1132                 nd->dentry = dget(fs->root);
1133                 read_unlock(&fs->lock);
1134         } else if (dfd == AT_FDCWD) {
1135                 read_lock(&fs->lock);
1136                 nd->mnt = mntget(fs->pwdmnt);
1137                 nd->dentry = dget(fs->pwd);
1138                 read_unlock(&fs->lock);
1139         } else {
1140                 struct dentry *dentry;
1141
1142                 file = fget_light(dfd, &fput_needed);
1143                 retval = -EBADF;
1144                 if (!file)
1145                         goto out_fail;
1146
1147                 dentry = file->f_path.dentry;
1148
1149                 retval = -ENOTDIR;
1150                 if (!S_ISDIR(dentry->d_inode->i_mode))
1151                         goto fput_fail;
1152
1153                 retval = file_permission(file, MAY_EXEC);
1154                 if (retval)
1155                         goto fput_fail;
1156
1157                 nd->mnt = mntget(file->f_path.mnt);
1158                 nd->dentry = dget(dentry);
1159
1160                 fput_light(file, fput_needed);
1161         }
1162
1163         retval = path_walk(name, nd);
1164 out:
1165         if (unlikely(!retval && !audit_dummy_context() && nd->dentry &&
1166                                 nd->dentry->d_inode))
1167                 audit_inode(name, nd->dentry);
1168 out_fail:
1169         return retval;
1170
1171 fput_fail:
1172         fput_light(file, fput_needed);
1173         goto out_fail;
1174 }
1175
1176 int path_lookup(const char *name, unsigned int flags,
1177                         struct nameidata *nd)
1178 {
1179         return do_path_lookup(AT_FDCWD, name, flags, nd);
1180 }
1181
1182 /**
1183  * vfs_path_lookup - lookup a file path relative to a dentry-vfsmount pair
1184  * @dentry:  pointer to dentry of the base directory
1185  * @mnt: pointer to vfs mount of the base directory
1186  * @name: pointer to file name
1187  * @flags: lookup flags
1188  * @nd: pointer to nameidata
1189  */
1190 int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
1191                     const char *name, unsigned int flags,
1192                     struct nameidata *nd)
1193 {
1194         int retval;
1195
1196         /* same as do_path_lookup */
1197         nd->last_type = LAST_ROOT;
1198         nd->flags = flags;
1199         nd->depth = 0;
1200
1201         nd->mnt = mntget(mnt);
1202         nd->dentry = dget(dentry);
1203
1204         retval = path_walk(name, nd);
1205         if (unlikely(!retval && !audit_dummy_context() && nd->dentry &&
1206                                 nd->dentry->d_inode))
1207                 audit_inode(name, nd->dentry);
1208
1209         return retval;
1210
1211 }
1212
1213 static int __path_lookup_intent_open(int dfd, const char *name,
1214                 unsigned int lookup_flags, struct nameidata *nd,
1215                 int open_flags, int create_mode)
1216 {
1217         struct file *filp = get_empty_filp();
1218         int err;
1219
1220         if (filp == NULL)
1221                 return -ENFILE;
1222         nd->intent.open.file = filp;
1223         nd->intent.open.flags = open_flags;
1224         nd->intent.open.create_mode = create_mode;
1225         err = do_path_lookup(dfd, name, lookup_flags|LOOKUP_OPEN, nd);
1226         if (IS_ERR(nd->intent.open.file)) {
1227                 if (err == 0) {
1228                         err = PTR_ERR(nd->intent.open.file);
1229                         path_release(nd);
1230                 }
1231         } else if (err != 0)
1232                 release_open_intent(nd);
1233         return err;
1234 }
1235
1236 /**
1237  * path_lookup_open - lookup a file path with open intent
1238  * @dfd: the directory to use as base, or AT_FDCWD
1239  * @name: pointer to file name
1240  * @lookup_flags: lookup intent flags
1241  * @nd: pointer to nameidata
1242  * @open_flags: open intent flags
1243  */
1244 int path_lookup_open(int dfd, const char *name, unsigned int lookup_flags,
1245                 struct nameidata *nd, int open_flags)
1246 {
1247         return __path_lookup_intent_open(dfd, name, lookup_flags, nd,
1248                         open_flags, 0);
1249 }
1250
1251 /**
1252  * path_lookup_create - lookup a file path with open + create intent
1253  * @dfd: the directory to use as base, or AT_FDCWD
1254  * @name: pointer to file name
1255  * @lookup_flags: lookup intent flags
1256  * @nd: pointer to nameidata
1257  * @open_flags: open intent flags
1258  * @create_mode: create intent flags
1259  */
1260 static int path_lookup_create(int dfd, const char *name,
1261                               unsigned int lookup_flags, struct nameidata *nd,
1262                               int open_flags, int create_mode)
1263 {
1264         return __path_lookup_intent_open(dfd, name, lookup_flags|LOOKUP_CREATE,
1265                         nd, open_flags, create_mode);
1266 }
1267
1268 int __user_path_lookup_open(const char __user *name, unsigned int lookup_flags,
1269                 struct nameidata *nd, int open_flags)
1270 {
1271         char *tmp = getname(name);
1272         int err = PTR_ERR(tmp);
1273
1274         if (!IS_ERR(tmp)) {
1275                 err = __path_lookup_intent_open(AT_FDCWD, tmp, lookup_flags, nd, open_flags, 0);
1276                 putname(tmp);
1277         }
1278         return err;
1279 }
1280
1281 static struct dentry *__lookup_hash(struct qstr *name,
1282                 struct dentry *base, struct nameidata *nd)
1283 {
1284         struct dentry *dentry;
1285         struct inode *inode;
1286         int err;
1287
1288         inode = base->d_inode;
1289
1290         /*
1291          * See if the low-level filesystem might want
1292          * to use its own hash..
1293          */
1294         if (base->d_op && base->d_op->d_hash) {
1295                 err = base->d_op->d_hash(base, name);
1296                 dentry = ERR_PTR(err);
1297                 if (err < 0)
1298                         goto out;
1299         }
1300
1301         dentry = cached_lookup(base, name, nd);
1302         if (!dentry) {
1303                 struct dentry *new = d_alloc(base, name);
1304                 dentry = ERR_PTR(-ENOMEM);
1305                 if (!new)
1306                         goto out;
1307                 dentry = inode->i_op->lookup(inode, new, nd);
1308                 if (!dentry)
1309                         dentry = new;
1310                 else
1311                         dput(new);
1312         }
1313 out:
1314         return dentry;
1315 }
1316
1317 /*
1318  * Restricted form of lookup. Doesn't follow links, single-component only,
1319  * needs parent already locked. Doesn't follow mounts.
1320  * SMP-safe.
1321  */
1322 static struct dentry *lookup_hash(struct nameidata *nd)
1323 {
1324         int err;
1325
1326         err = permission(nd->dentry->d_inode, MAY_EXEC, nd);
1327         if (err)
1328                 return ERR_PTR(err);
1329         return __lookup_hash(&nd->last, nd->dentry, nd);
1330 }
1331
1332 static int __lookup_one_len(const char *name, struct qstr *this,
1333                 struct dentry *base, int len)
1334 {
1335         unsigned long hash;
1336         unsigned int c;
1337
1338         this->name = name;
1339         this->len = len;
1340         if (!len)
1341                 return -EACCES;
1342
1343         hash = init_name_hash();
1344         while (len--) {
1345                 c = *(const unsigned char *)name++;
1346                 if (c == '/' || c == '\0')
1347                         return -EACCES;
1348                 hash = partial_name_hash(c, hash);
1349         }
1350         this->hash = end_name_hash(hash);
1351         return 0;
1352 }
1353
1354 /**
1355  * lookup_one_len:  filesystem helper to lookup single pathname component
1356  * @name:       pathname component to lookup
1357  * @base:       base directory to lookup from
1358  * @len:        maximum length @len should be interpreted to
1359  *
1360  * Note that this routine is purely a helper for filesystem useage and should
1361  * not be called by generic code.  Also note that by using this function to
1362  * nameidata argument is passed to the filesystem methods and a filesystem
1363  * using this helper needs to be prepared for that.
1364  */
1365 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
1366 {
1367         int err;
1368         struct qstr this;
1369
1370         err = __lookup_one_len(name, &this, base, len);
1371         if (err)
1372                 return ERR_PTR(err);
1373
1374         err = permission(base->d_inode, MAY_EXEC, NULL);
1375         if (err)
1376                 return ERR_PTR(err);
1377         return __lookup_hash(&this, base, NULL);
1378 }
1379
1380 /**
1381  * lookup_one_noperm - bad hack for sysfs
1382  * @name:       pathname component to lookup
1383  * @base:       base directory to lookup from
1384  *
1385  * This is a variant of lookup_one_len that doesn't perform any permission
1386  * checks.   It's a horrible hack to work around the braindead sysfs
1387  * architecture and should not be used anywhere else.
1388  *
1389  * DON'T USE THIS FUNCTION EVER, thanks.
1390  */
1391 struct dentry *lookup_one_noperm(const char *name, struct dentry *base)
1392 {
1393         int err;
1394         struct qstr this;
1395
1396         err = __lookup_one_len(name, &this, base, strlen(name));
1397         if (err)
1398                 return ERR_PTR(err);
1399         return __lookup_hash(&this, base, NULL);
1400 }
1401
1402 int __user_walk_fd(int dfd, const char __user *name, unsigned flags,
1403                             struct nameidata *nd)
1404 {
1405         char *tmp = getname(name);
1406         int err = PTR_ERR(tmp);
1407
1408         if (!IS_ERR(tmp)) {
1409                 err = do_path_lookup(dfd, tmp, flags, nd);
1410                 putname(tmp);
1411         }
1412         return err;
1413 }
1414
1415 int __user_walk(const char __user *name, unsigned flags, struct nameidata *nd)
1416 {
1417         return __user_walk_fd(AT_FDCWD, name, flags, nd);
1418 }
1419
1420 /*
1421  * It's inline, so penalty for filesystems that don't use sticky bit is
1422  * minimal.
1423  */
1424 static inline int check_sticky(struct inode *dir, struct inode *inode)
1425 {
1426         if (!(dir->i_mode & S_ISVTX))
1427                 return 0;
1428         if (inode->i_uid == current->fsuid)
1429                 return 0;
1430         if (dir->i_uid == current->fsuid)
1431                 return 0;
1432         return !capable(CAP_FOWNER);
1433 }
1434
1435 /*
1436  *      Check whether we can remove a link victim from directory dir, check
1437  *  whether the type of victim is right.
1438  *  1. We can't do it if dir is read-only (done in permission())
1439  *  2. We should have write and exec permissions on dir
1440  *  3. We can't remove anything from append-only dir
1441  *  4. We can't do anything with immutable dir (done in permission())
1442  *  5. If the sticky bit on dir is set we should either
1443  *      a. be owner of dir, or
1444  *      b. be owner of victim, or
1445  *      c. have CAP_FOWNER capability
1446  *  6. If the victim is append-only or immutable we can't do antyhing with
1447  *     links pointing to it.
1448  *  7. If we were asked to remove a directory and victim isn't one - ENOTDIR.
1449  *  8. If we were asked to remove a non-directory and victim isn't one - EISDIR.
1450  *  9. We can't remove a root or mountpoint.
1451  * 10. We don't allow removal of NFS sillyrenamed files; it's handled by
1452  *     nfs_async_unlink().
1453  */
1454 static int may_delete(struct inode *dir,struct dentry *victim,int isdir)
1455 {
1456         int error;
1457
1458         if (!victim->d_inode)
1459                 return -ENOENT;
1460
1461         BUG_ON(victim->d_parent->d_inode != dir);
1462         audit_inode_child(victim->d_name.name, victim, dir);
1463
1464         error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);
1465         if (error)
1466                 return error;
1467         if (IS_APPEND(dir))
1468                 return -EPERM;
1469         if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
1470             IS_IMMUTABLE(victim->d_inode))
1471                 return -EPERM;
1472         if (isdir) {
1473                 if (!S_ISDIR(victim->d_inode->i_mode))
1474                         return -ENOTDIR;
1475                 if (IS_ROOT(victim))
1476                         return -EBUSY;
1477         } else if (S_ISDIR(victim->d_inode->i_mode))
1478                 return -EISDIR;
1479         if (IS_DEADDIR(dir))
1480                 return -ENOENT;
1481         if (victim->d_flags & DCACHE_NFSFS_RENAMED)
1482                 return -EBUSY;
1483         return 0;
1484 }
1485
1486 /*      Check whether we can create an object with dentry child in directory
1487  *  dir.
1488  *  1. We can't do it if child already exists (open has special treatment for
1489  *     this case, but since we are inlined it's OK)
1490  *  2. We can't do it if dir is read-only (done in permission())
1491  *  3. We should have write and exec permissions on dir
1492  *  4. We can't do it if dir is immutable (done in permission())
1493  */
1494 static inline int may_create(struct inode *dir, struct dentry *child,
1495                              struct nameidata *nd)
1496 {
1497         if (child->d_inode)
1498                 return -EEXIST;
1499         if (IS_DEADDIR(dir))
1500                 return -ENOENT;
1501         return permission(dir,MAY_WRITE | MAY_EXEC, nd);
1502 }
1503
1504 /* 
1505  * O_DIRECTORY translates into forcing a directory lookup.
1506  */
1507 static inline int lookup_flags(unsigned int f)
1508 {
1509         unsigned long retval = LOOKUP_FOLLOW;
1510
1511         if (f & O_NOFOLLOW)
1512                 retval &= ~LOOKUP_FOLLOW;
1513         
1514         if (f & O_DIRECTORY)
1515                 retval |= LOOKUP_DIRECTORY;
1516
1517         return retval;
1518 }
1519
1520 /*
1521  * p1 and p2 should be directories on the same fs.
1522  */
1523 struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
1524 {
1525         struct dentry *p;
1526
1527         if (p1 == p2) {
1528                 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
1529                 return NULL;
1530         }
1531
1532         mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
1533
1534         for (p = p1; p->d_parent != p; p = p->d_parent) {
1535                 if (p->d_parent == p2) {
1536                         mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT);
1537                         mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_CHILD);
1538                         return p;
1539                 }
1540         }
1541
1542         for (p = p2; p->d_parent != p; p = p->d_parent) {
1543                 if (p->d_parent == p1) {
1544                         mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
1545                         mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
1546                         return p;
1547                 }
1548         }
1549
1550         mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
1551         mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
1552         return NULL;
1553 }
1554
1555 void unlock_rename(struct dentry *p1, struct dentry *p2)
1556 {
1557         mutex_unlock(&p1->d_inode->i_mutex);
1558         if (p1 != p2) {
1559                 mutex_unlock(&p2->d_inode->i_mutex);
1560                 mutex_unlock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
1561         }
1562 }
1563
1564 int vfs_create(struct inode *dir, struct dentry *dentry, int mode,
1565                 struct nameidata *nd)
1566 {
1567         int error = may_create(dir, dentry, nd);
1568
1569         if (error)
1570                 return error;
1571
1572         if (!dir->i_op || !dir->i_op->create)
1573                 return -EACCES; /* shouldn't it be ENOSYS? */
1574         mode &= S_IALLUGO;
1575         mode |= S_IFREG;
1576         error = security_inode_create(dir, dentry, mode);
1577         if (error)
1578                 return error;
1579         DQUOT_INIT(dir);
1580         error = dir->i_op->create(dir, dentry, mode, nd);
1581         if (!error)
1582                 fsnotify_create(dir, dentry);
1583         return error;
1584 }
1585
1586 int may_open(struct nameidata *nd, int acc_mode, int flag)
1587 {
1588         struct dentry *dentry = nd->dentry;
1589         struct inode *inode = dentry->d_inode;
1590         int error;
1591
1592         if (!inode)
1593                 return -ENOENT;
1594
1595         if (S_ISLNK(inode->i_mode))
1596                 return -ELOOP;
1597         
1598         if (S_ISDIR(inode->i_mode) && (acc_mode & MAY_WRITE))
1599                 return -EISDIR;
1600
1601         /*
1602          * FIFO's, sockets and device files are special: they don't
1603          * actually live on the filesystem itself, and as such you
1604          * can write to them even if the filesystem is read-only.
1605          */
1606         if (S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
1607                 flag &= ~O_TRUNC;
1608         } else if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
1609                 if (nd->mnt->mnt_flags & MNT_NODEV)
1610                         return -EACCES;
1611
1612                 flag &= ~O_TRUNC;
1613         } else if (IS_RDONLY(inode) && (acc_mode & MAY_WRITE))
1614                 return -EROFS;
1615
1616         error = vfs_permission(nd, acc_mode);
1617         if (error)
1618                 return error;
1619         /*
1620          * An append-only file must be opened in append mode for writing.
1621          */
1622         if (IS_APPEND(inode)) {
1623                 if  ((flag & FMODE_WRITE) && !(flag & O_APPEND))
1624                         return -EPERM;
1625                 if (flag & O_TRUNC)
1626                         return -EPERM;
1627         }
1628
1629         /* O_NOATIME can only be set by the owner or superuser */
1630         if (flag & O_NOATIME)
1631                 if (!is_owner_or_cap(inode))
1632                         return -EPERM;
1633
1634         /*
1635          * Ensure there are no outstanding leases on the file.
1636          */
1637         error = break_lease(inode, flag);
1638         if (error)
1639                 return error;
1640
1641         if (flag & O_TRUNC) {
1642                 error = get_write_access(inode);
1643                 if (error)
1644                         return error;
1645
1646                 /*
1647                  * Refuse to truncate files with mandatory locks held on them.
1648                  */
1649                 error = locks_verify_locked(inode);
1650                 if (!error) {
1651                         DQUOT_INIT(inode);
1652
1653                         error = do_truncate(dentry, 0,
1654                                             ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
1655                                             NULL);
1656                 }
1657                 put_write_access(inode);
1658                 if (error)
1659                         return error;
1660         } else
1661                 if (flag & FMODE_WRITE)
1662                         DQUOT_INIT(inode);
1663
1664         return 0;
1665 }
1666
1667 static int open_namei_create(struct nameidata *nd, struct path *path,
1668                                 int flag, int mode)
1669 {
1670         int error;
1671         struct dentry *dir = nd->dentry;
1672
1673         if (!IS_POSIXACL(dir->d_inode))
1674                 mode &= ~current->fs->umask;
1675         error = vfs_create(dir->d_inode, path->dentry, mode, nd);
1676         mutex_unlock(&dir->d_inode->i_mutex);
1677         dput(nd->dentry);
1678         nd->dentry = path->dentry;
1679         if (error)
1680                 return error;
1681         /* Don't check for write permission, don't truncate */
1682         return may_open(nd, 0, flag & ~O_TRUNC);
1683 }
1684
1685 /*
1686  *      open_namei()
1687  *
1688  * namei for open - this is in fact almost the whole open-routine.
1689  *
1690  * Note that the low bits of "flag" aren't the same as in the open
1691  * system call - they are 00 - no permissions needed
1692  *                        01 - read permission needed
1693  *                        10 - write permission needed
1694  *                        11 - read/write permissions needed
1695  * which is a lot more logical, and also allows the "no perm" needed
1696  * for symlinks (where the permissions are checked later).
1697  * SMP-safe
1698  */
1699 int open_namei(int dfd, const char *pathname, int flag,
1700                 int mode, struct nameidata *nd)
1701 {
1702         int acc_mode, error;
1703         struct path path;
1704         struct dentry *dir;
1705         int count = 0;
1706
1707         acc_mode = ACC_MODE(flag);
1708
1709         /* O_TRUNC implies we need access checks for write permissions */
1710         if (flag & O_TRUNC)
1711                 acc_mode |= MAY_WRITE;
1712
1713         /* Allow the LSM permission hook to distinguish append 
1714            access from general write access. */
1715         if (flag & O_APPEND)
1716                 acc_mode |= MAY_APPEND;
1717
1718         /*
1719          * The simplest case - just a plain lookup.
1720          */
1721         if (!(flag & O_CREAT)) {
1722                 error = path_lookup_open(dfd, pathname, lookup_flags(flag),
1723                                          nd, flag);
1724                 if (error)
1725                         return error;
1726                 goto ok;
1727         }
1728
1729         /*
1730          * Create - we need to know the parent.
1731          */
1732         error = path_lookup_create(dfd,pathname,LOOKUP_PARENT,nd,flag,mode);
1733         if (error)
1734                 return error;
1735
1736         /*
1737          * We have the parent and last component. First of all, check
1738          * that we are not asked to creat(2) an obvious directory - that
1739          * will not do.
1740          */
1741         error = -EISDIR;
1742         if (nd->last_type != LAST_NORM || nd->last.name[nd->last.len])
1743                 goto exit;
1744
1745         dir = nd->dentry;
1746         nd->flags &= ~LOOKUP_PARENT;
1747         mutex_lock(&dir->d_inode->i_mutex);
1748         path.dentry = lookup_hash(nd);
1749         path.mnt = nd->mnt;
1750
1751 do_last:
1752         error = PTR_ERR(path.dentry);
1753         if (IS_ERR(path.dentry)) {
1754                 mutex_unlock(&dir->d_inode->i_mutex);
1755                 goto exit;
1756         }
1757
1758         if (IS_ERR(nd->intent.open.file)) {
1759                 mutex_unlock(&dir->d_inode->i_mutex);
1760                 error = PTR_ERR(nd->intent.open.file);
1761                 goto exit_dput;
1762         }
1763
1764         /* Negative dentry, just create the file */
1765         if (!path.dentry->d_inode) {
1766                 error = open_namei_create(nd, &path, flag, mode);
1767                 if (error)
1768                         goto exit;
1769                 return 0;
1770         }
1771
1772         /*
1773          * It already exists.
1774          */
1775         mutex_unlock(&dir->d_inode->i_mutex);
1776         audit_inode(pathname, path.dentry);
1777
1778         error = -EEXIST;
1779         if (flag & O_EXCL)
1780                 goto exit_dput;
1781
1782         if (__follow_mount(&path)) {
1783                 error = -ELOOP;
1784                 if (flag & O_NOFOLLOW)
1785                         goto exit_dput;
1786         }
1787
1788         error = -ENOENT;
1789         if (!path.dentry->d_inode)
1790                 goto exit_dput;
1791         if (path.dentry->d_inode->i_op && path.dentry->d_inode->i_op->follow_link)
1792                 goto do_link;
1793
1794         path_to_nameidata(&path, nd);
1795         error = -EISDIR;
1796         if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode))
1797                 goto exit;
1798 ok:
1799         error = may_open(nd, acc_mode, flag);
1800         if (error)
1801                 goto exit;
1802         return 0;
1803
1804 exit_dput:
1805         dput_path(&path, nd);
1806 exit:
1807         if (!IS_ERR(nd->intent.open.file))
1808                 release_open_intent(nd);
1809         path_release(nd);
1810         return error;
1811
1812 do_link:
1813         error = -ELOOP;
1814         if (flag & O_NOFOLLOW)
1815                 goto exit_dput;
1816         /*
1817          * This is subtle. Instead of calling do_follow_link() we do the
1818          * thing by hands. The reason is that this way we have zero link_count
1819          * and path_walk() (called from ->follow_link) honoring LOOKUP_PARENT.
1820          * After that we have the parent and last component, i.e.
1821          * we are in the same situation as after the first path_walk().
1822          * Well, almost - if the last component is normal we get its copy
1823          * stored in nd->last.name and we will have to putname() it when we
1824          * are done. Procfs-like symlinks just set LAST_BIND.
1825          */
1826         nd->flags |= LOOKUP_PARENT;
1827         error = security_inode_follow_link(path.dentry, nd);
1828         if (error)
1829                 goto exit_dput;
1830         error = __do_follow_link(&path, nd);
1831         if (error) {
1832                 /* Does someone understand code flow here? Or it is only
1833                  * me so stupid? Anathema to whoever designed this non-sense
1834                  * with "intent.open".
1835                  */
1836                 release_open_intent(nd);
1837                 return error;
1838         }
1839         nd->flags &= ~LOOKUP_PARENT;
1840         if (nd->last_type == LAST_BIND)
1841                 goto ok;
1842         error = -EISDIR;
1843         if (nd->last_type != LAST_NORM)
1844                 goto exit;
1845         if (nd->last.name[nd->last.len]) {
1846                 __putname(nd->last.name);
1847                 goto exit;
1848         }
1849         error = -ELOOP;
1850         if (count++==32) {
1851                 __putname(nd->last.name);
1852                 goto exit;
1853         }
1854         dir = nd->dentry;
1855         mutex_lock(&dir->d_inode->i_mutex);
1856         path.dentry = lookup_hash(nd);
1857         path.mnt = nd->mnt;
1858         __putname(nd->last.name);
1859         goto do_last;
1860 }
1861
1862 /**
1863  * lookup_create - lookup a dentry, creating it if it doesn't exist
1864  * @nd: nameidata info
1865  * @is_dir: directory flag
1866  *
1867  * Simple function to lookup and return a dentry and create it
1868  * if it doesn't exist.  Is SMP-safe.
1869  *
1870  * Returns with nd->dentry->d_inode->i_mutex locked.
1871  */
1872 struct dentry *lookup_create(struct nameidata *nd, int is_dir)
1873 {
1874         struct dentry *dentry = ERR_PTR(-EEXIST);
1875
1876         mutex_lock_nested(&nd->dentry->d_inode->i_mutex, I_MUTEX_PARENT);
1877         /*
1878          * Yucky last component or no last component at all?
1879          * (foo/., foo/.., /////)
1880          */
1881         if (nd->last_type != LAST_NORM)
1882                 goto fail;
1883         nd->flags &= ~LOOKUP_PARENT;
1884         nd->flags |= LOOKUP_CREATE;
1885         nd->intent.open.flags = O_EXCL;
1886
1887         /*
1888          * Do the final lookup.
1889          */
1890         dentry = lookup_hash(nd);
1891         if (IS_ERR(dentry))
1892                 goto fail;
1893
1894         /*
1895          * Special case - lookup gave negative, but... we had foo/bar/
1896          * From the vfs_mknod() POV we just have a negative dentry -
1897          * all is fine. Let's be bastards - you had / on the end, you've
1898          * been asking for (non-existent) directory. -ENOENT for you.
1899          */
1900         if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
1901                 goto enoent;
1902         return dentry;
1903 enoent:
1904         dput(dentry);
1905         dentry = ERR_PTR(-ENOENT);
1906 fail:
1907         return dentry;
1908 }
1909 EXPORT_SYMBOL_GPL(lookup_create);
1910
1911 int vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
1912 {
1913         int error = may_create(dir, dentry, NULL);
1914
1915         if (error)
1916                 return error;
1917
1918         if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD))
1919                 return -EPERM;
1920
1921         if (!dir->i_op || !dir->i_op->mknod)
1922                 return -EPERM;
1923
1924         error = security_inode_mknod(dir, dentry, mode, dev);
1925         if (error)
1926                 return error;
1927
1928         DQUOT_INIT(dir);
1929         error = dir->i_op->mknod(dir, dentry, mode, dev);
1930         if (!error)
1931                 fsnotify_create(dir, dentry);
1932         return error;
1933 }
1934
1935 asmlinkage long sys_mknodat(int dfd, const char __user *filename, int mode,
1936                                 unsigned dev)
1937 {
1938         int error = 0;
1939         char * tmp;
1940         struct dentry * dentry;
1941         struct nameidata nd;
1942
1943         if (S_ISDIR(mode))
1944                 return -EPERM;
1945         tmp = getname(filename);
1946         if (IS_ERR(tmp))
1947                 return PTR_ERR(tmp);
1948
1949         error = do_path_lookup(dfd, tmp, LOOKUP_PARENT, &nd);
1950         if (error)
1951                 goto out;
1952         dentry = lookup_create(&nd, 0);
1953         error = PTR_ERR(dentry);
1954
1955         if (!IS_POSIXACL(nd.dentry->d_inode))
1956                 mode &= ~current->fs->umask;
1957         if (!IS_ERR(dentry)) {
1958                 switch (mode & S_IFMT) {
1959                 case 0: case S_IFREG:
1960                         error = vfs_create(nd.dentry->d_inode,dentry,mode,&nd);
1961                         break;
1962                 case S_IFCHR: case S_IFBLK:
1963                         error = vfs_mknod(nd.dentry->d_inode,dentry,mode,
1964                                         new_decode_dev(dev));
1965                         break;
1966                 case S_IFIFO: case S_IFSOCK:
1967                         error = vfs_mknod(nd.dentry->d_inode,dentry,mode,0);
1968                         break;
1969                 case S_IFDIR:
1970                         error = -EPERM;
1971                         break;
1972                 default:
1973                         error = -EINVAL;
1974                 }
1975                 dput(dentry);
1976         }
1977         mutex_unlock(&nd.dentry->d_inode->i_mutex);
1978         path_release(&nd);
1979 out:
1980         putname(tmp);
1981
1982         return error;
1983 }
1984
1985 asmlinkage long sys_mknod(const char __user *filename, int mode, unsigned dev)
1986 {
1987         return sys_mknodat(AT_FDCWD, filename, mode, dev);
1988 }
1989
1990 int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
1991 {
1992         int error = may_create(dir, dentry, NULL);
1993
1994         if (error)
1995                 return error;
1996
1997         if (!dir->i_op || !dir->i_op->mkdir)
1998                 return -EPERM;
1999
2000         mode &= (S_IRWXUGO|S_ISVTX);
2001         error = security_inode_mkdir(dir, dentry, mode);
2002         if (error)
2003                 return error;
2004
2005         DQUOT_INIT(dir);
2006         error = dir->i_op->mkdir(dir, dentry, mode);
2007         if (!error)
2008                 fsnotify_mkdir(dir, dentry);
2009         return error;
2010 }
2011
2012 asmlinkage long sys_mkdirat(int dfd, const char __user *pathname, int mode)
2013 {
2014         int error = 0;
2015         char * tmp;
2016         struct dentry *dentry;
2017         struct nameidata nd;
2018
2019         tmp = getname(pathname);
2020         error = PTR_ERR(tmp);
2021         if (IS_ERR(tmp))
2022                 goto out_err;
2023
2024         error = do_path_lookup(dfd, tmp, LOOKUP_PARENT, &nd);
2025         if (error)
2026                 goto out;
2027         dentry = lookup_create(&nd, 1);
2028         error = PTR_ERR(dentry);
2029         if (IS_ERR(dentry))
2030                 goto out_unlock;
2031
2032         if (!IS_POSIXACL(nd.dentry->d_inode))
2033                 mode &= ~current->fs->umask;
2034         error = vfs_mkdir(nd.dentry->d_inode, dentry, mode);
2035         dput(dentry);
2036 out_unlock:
2037         mutex_unlock(&nd.dentry->d_inode->i_mutex);
2038         path_release(&nd);
2039 out:
2040         putname(tmp);
2041 out_err:
2042         return error;
2043 }
2044
2045 asmlinkage long sys_mkdir(const char __user *pathname, int mode)
2046 {
2047         return sys_mkdirat(AT_FDCWD, pathname, mode);
2048 }
2049
2050 /*
2051  * We try to drop the dentry early: we should have
2052  * a usage count of 2 if we're the only user of this
2053  * dentry, and if that is true (possibly after pruning
2054  * the dcache), then we drop the dentry now.
2055  *
2056  * A low-level filesystem can, if it choses, legally
2057  * do a
2058  *
2059  *      if (!d_unhashed(dentry))
2060  *              return -EBUSY;
2061  *
2062  * if it cannot handle the case of removing a directory
2063  * that is still in use by something else..
2064  */
2065 void dentry_unhash(struct dentry *dentry)
2066 {
2067         dget(dentry);
2068         shrink_dcache_parent(dentry);
2069         spin_lock(&dcache_lock);
2070         spin_lock(&dentry->d_lock);
2071         if (atomic_read(&dentry->d_count) == 2)
2072                 __d_drop(dentry);
2073         spin_unlock(&dentry->d_lock);
2074         spin_unlock(&dcache_lock);
2075 }
2076
2077 int vfs_rmdir(struct inode *dir, struct dentry *dentry)
2078 {
2079         int error = may_delete(dir, dentry, 1);
2080
2081         if (error)
2082                 return error;
2083
2084         if (!dir->i_op || !dir->i_op->rmdir)
2085                 return -EPERM;
2086
2087         DQUOT_INIT(dir);
2088
2089         mutex_lock(&dentry->d_inode->i_mutex);
2090         dentry_unhash(dentry);
2091         if (d_mountpoint(dentry))
2092                 error = -EBUSY;
2093         else {
2094                 error = security_inode_rmdir(dir, dentry);
2095                 if (!error) {
2096                         error = dir->i_op->rmdir(dir, dentry);
2097                         if (!error)
2098                                 dentry->d_inode->i_flags |= S_DEAD;
2099                 }
2100         }
2101         mutex_unlock(&dentry->d_inode->i_mutex);
2102         if (!error) {
2103                 d_delete(dentry);
2104         }
2105         dput(dentry);
2106
2107         return error;
2108 }
2109
2110 static long do_rmdir(int dfd, const char __user *pathname)
2111 {
2112         int error = 0;
2113         char * name;
2114         struct dentry *dentry;
2115         struct nameidata nd;
2116
2117         name = getname(pathname);
2118         if(IS_ERR(name))
2119                 return PTR_ERR(name);
2120
2121         error = do_path_lookup(dfd, name, LOOKUP_PARENT, &nd);
2122         if (error)
2123                 goto exit;
2124
2125         switch(nd.last_type) {
2126                 case LAST_DOTDOT:
2127                         error = -ENOTEMPTY;
2128                         goto exit1;
2129                 case LAST_DOT:
2130                         error = -EINVAL;
2131                         goto exit1;
2132                 case LAST_ROOT:
2133                         error = -EBUSY;
2134                         goto exit1;
2135         }
2136         mutex_lock_nested(&nd.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
2137         dentry = lookup_hash(&nd);
2138         error = PTR_ERR(dentry);
2139         if (IS_ERR(dentry))
2140                 goto exit2;
2141         error = vfs_rmdir(nd.dentry->d_inode, dentry);
2142         dput(dentry);
2143 exit2:
2144         mutex_unlock(&nd.dentry->d_inode->i_mutex);
2145 exit1:
2146         path_release(&nd);
2147 exit:
2148         putname(name);
2149         return error;
2150 }
2151
2152 asmlinkage long sys_rmdir(const char __user *pathname)
2153 {
2154         return do_rmdir(AT_FDCWD, pathname);
2155 }
2156
2157 int vfs_unlink(struct inode *dir, struct dentry *dentry)
2158 {
2159         int error = may_delete(dir, dentry, 0);
2160
2161         if (error)
2162                 return error;
2163
2164         if (!dir->i_op || !dir->i_op->unlink)
2165                 return -EPERM;
2166
2167         DQUOT_INIT(dir);
2168
2169         mutex_lock(&dentry->d_inode->i_mutex);
2170         if (d_mountpoint(dentry))
2171                 error = -EBUSY;
2172         else {
2173                 error = security_inode_unlink(dir, dentry);
2174                 if (!error)
2175                         error = dir->i_op->unlink(dir, dentry);
2176         }
2177         mutex_unlock(&dentry->d_inode->i_mutex);
2178
2179         /* We don't d_delete() NFS sillyrenamed files--they still exist. */
2180         if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
2181                 fsnotify_link_count(dentry->d_inode);
2182                 d_delete(dentry);
2183         }
2184
2185         return error;
2186 }
2187
2188 /*
2189  * Make sure that the actual truncation of the file will occur outside its
2190  * directory's i_mutex.  Truncate can take a long time if there is a lot of
2191  * writeout happening, and we don't want to prevent access to the directory
2192  * while waiting on the I/O.
2193  */
2194 static long do_unlinkat(int dfd, const char __user *pathname)
2195 {
2196         int error = 0;
2197         char * name;
2198         struct dentry *dentry;
2199         struct nameidata nd;
2200         struct inode *inode = NULL;
2201
2202         name = getname(pathname);
2203         if(IS_ERR(name))
2204                 return PTR_ERR(name);
2205
2206         error = do_path_lookup(dfd, name, LOOKUP_PARENT, &nd);
2207         if (error)
2208                 goto exit;
2209         error = -EISDIR;
2210         if (nd.last_type != LAST_NORM)
2211                 goto exit1;
2212         mutex_lock_nested(&nd.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
2213         dentry = lookup_hash(&nd);
2214         error = PTR_ERR(dentry);
2215         if (!IS_ERR(dentry)) {
2216                 /* Why not before? Because we want correct error value */
2217                 if (nd.last.name[nd.last.len])
2218                         goto slashes;
2219                 inode = dentry->d_inode;
2220                 if (inode)
2221                         atomic_inc(&inode->i_count);
2222                 error = vfs_unlink(nd.dentry->d_inode, dentry);
2223         exit2:
2224                 dput(dentry);
2225         }
2226         mutex_unlock(&nd.dentry->d_inode->i_mutex);
2227         if (inode)
2228                 iput(inode);    /* truncate the inode here */
2229 exit1:
2230         path_release(&nd);
2231 exit:
2232         putname(name);
2233         return error;
2234
2235 slashes:
2236         error = !dentry->d_inode ? -ENOENT :
2237                 S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR;
2238         goto exit2;
2239 }
2240
2241 asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag)
2242 {
2243         if ((flag & ~AT_REMOVEDIR) != 0)
2244                 return -EINVAL;
2245
2246         if (flag & AT_REMOVEDIR)
2247                 return do_rmdir(dfd, pathname);
2248
2249         return do_unlinkat(dfd, pathname);
2250 }
2251
2252 asmlinkage long sys_unlink(const char __user *pathname)
2253 {
2254         return do_unlinkat(AT_FDCWD, pathname);
2255 }
2256
2257 int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname, int mode)
2258 {
2259         int error = may_create(dir, dentry, NULL);
2260
2261         if (error)
2262                 return error;
2263
2264         if (!dir->i_op || !dir->i_op->symlink)
2265                 return -EPERM;
2266
2267         error = security_inode_symlink(dir, dentry, oldname);
2268         if (error)
2269                 return error;
2270
2271         DQUOT_INIT(dir);
2272         error = dir->i_op->symlink(dir, dentry, oldname);
2273         if (!error)
2274                 fsnotify_create(dir, dentry);
2275         return error;
2276 }
2277
2278 asmlinkage long sys_symlinkat(const char __user *oldname,
2279                               int newdfd, const char __user *newname)
2280 {
2281         int error = 0;
2282         char * from;
2283         char * to;
2284         struct dentry *dentry;
2285         struct nameidata nd;
2286
2287         from = getname(oldname);
2288         if(IS_ERR(from))
2289                 return PTR_ERR(from);
2290         to = getname(newname);
2291         error = PTR_ERR(to);
2292         if (IS_ERR(to))
2293                 goto out_putname;
2294
2295         error = do_path_lookup(newdfd, to, LOOKUP_PARENT, &nd);
2296         if (error)
2297                 goto out;
2298         dentry = lookup_create(&nd, 0);
2299         error = PTR_ERR(dentry);
2300         if (IS_ERR(dentry))
2301                 goto out_unlock;
2302
2303         error = vfs_symlink(nd.dentry->d_inode, dentry, from, S_IALLUGO);
2304         dput(dentry);
2305 out_unlock:
2306         mutex_unlock(&nd.dentry->d_inode->i_mutex);
2307         path_release(&nd);
2308 out:
2309         putname(to);
2310 out_putname:
2311         putname(from);
2312         return error;
2313 }
2314
2315 asmlinkage long sys_symlink(const char __user *oldname, const char __user *newname)
2316 {
2317         return sys_symlinkat(oldname, AT_FDCWD, newname);
2318 }
2319
2320 int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)
2321 {
2322         struct inode *inode = old_dentry->d_inode;
2323         int error;
2324
2325         if (!inode)
2326                 return -ENOENT;
2327
2328         error = may_create(dir, new_dentry, NULL);
2329         if (error)
2330                 return error;
2331
2332         if (dir->i_sb != inode->i_sb)
2333                 return -EXDEV;
2334
2335         /*
2336          * A link to an append-only or immutable file cannot be created.
2337          */
2338         if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
2339                 return -EPERM;
2340         if (!dir->i_op || !dir->i_op->link)
2341                 return -EPERM;
2342         if (S_ISDIR(old_dentry->d_inode->i_mode))
2343                 return -EPERM;
2344
2345         error = security_inode_link(old_dentry, dir, new_dentry);
2346         if (error)
2347                 return error;
2348
2349         mutex_lock(&old_dentry->d_inode->i_mutex);
2350         DQUOT_INIT(dir);
2351         error = dir->i_op->link(old_dentry, dir, new_dentry);
2352         mutex_unlock(&old_dentry->d_inode->i_mutex);
2353         if (!error)
2354                 fsnotify_link(dir, old_dentry->d_inode, new_dentry);
2355         return error;
2356 }
2357
2358 /*
2359  * Hardlinks are often used in delicate situations.  We avoid
2360  * security-related surprises by not following symlinks on the
2361  * newname.  --KAB
2362  *
2363  * We don't follow them on the oldname either to be compatible
2364  * with linux 2.0, and to avoid hard-linking to directories
2365  * and other special files.  --ADM
2366  */
2367 asmlinkage long sys_linkat(int olddfd, const char __user *oldname,
2368                            int newdfd, const char __user *newname,
2369                            int flags)
2370 {
2371         struct dentry *new_dentry;
2372         struct nameidata nd, old_nd;
2373         int error;
2374         char * to;
2375
2376         if ((flags & ~AT_SYMLINK_FOLLOW) != 0)
2377                 return -EINVAL;
2378
2379         to = getname(newname);
2380         if (IS_ERR(to))
2381                 return PTR_ERR(to);
2382
2383         error = __user_walk_fd(olddfd, oldname,
2384                                flags & AT_SYMLINK_FOLLOW ? LOOKUP_FOLLOW : 0,
2385                                &old_nd);
2386         if (error)
2387                 goto exit;
2388         error = do_path_lookup(newdfd, to, LOOKUP_PARENT, &nd);
2389         if (error)
2390                 goto out;
2391         error = -EXDEV;
2392         if (old_nd.mnt != nd.mnt)
2393                 goto out_release;
2394         new_dentry = lookup_create(&nd, 0);
2395         error = PTR_ERR(new_dentry);
2396         if (IS_ERR(new_dentry))
2397                 goto out_unlock;
2398         error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry);
2399         dput(new_dentry);
2400 out_unlock:
2401         mutex_unlock(&nd.dentry->d_inode->i_mutex);
2402 out_release:
2403         path_release(&nd);
2404 out:
2405         path_release(&old_nd);
2406 exit:
2407         putname(to);
2408
2409         return error;
2410 }
2411
2412 asmlinkage long sys_link(const char __user *oldname, const char __user *newname)
2413 {
2414         return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
2415 }
2416
2417 /*
2418  * The worst of all namespace operations - renaming directory. "Perverted"
2419  * doesn't even start to describe it. Somebody in UCB had a heck of a trip...
2420  * Problems:
2421  *      a) we can get into loop creation. Check is done in is_subdir().
2422  *      b) race potential - two innocent renames can create a loop together.
2423  *         That's where 4.4 screws up. Current fix: serialization on
2424  *         sb->s_vfs_rename_mutex. We might be more accurate, but that's another
2425  *         story.
2426  *      c) we have to lock _three_ objects - parents and victim (if it exists).
2427  *         And that - after we got ->i_mutex on parents (until then we don't know
2428  *         whether the target exists).  Solution: try to be smart with locking
2429  *         order for inodes.  We rely on the fact that tree topology may change
2430  *         only under ->s_vfs_rename_mutex _and_ that parent of the object we
2431  *         move will be locked.  Thus we can rank directories by the tree
2432  *         (ancestors first) and rank all non-directories after them.
2433  *         That works since everybody except rename does "lock parent, lookup,
2434  *         lock child" and rename is under ->s_vfs_rename_mutex.
2435  *         HOWEVER, it relies on the assumption that any object with ->lookup()
2436  *         has no more than 1 dentry.  If "hybrid" objects will ever appear,
2437  *         we'd better make sure that there's no link(2) for them.
2438  *      d) some filesystems don't support opened-but-unlinked directories,
2439  *         either because of layout or because they are not ready to deal with
2440  *         all cases correctly. The latter will be fixed (taking this sort of
2441  *         stuff into VFS), but the former is not going away. Solution: the same
2442  *         trick as in rmdir().
2443  *      e) conversion from fhandle to dentry may come in the wrong moment - when
2444  *         we are removing the target. Solution: we will have to grab ->i_mutex
2445  *         in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on
2446  *         ->i_mutex on parents, which works but leads to some truely excessive
2447  *         locking].
2448  */
2449 static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
2450                           struct inode *new_dir, struct dentry *new_dentry)
2451 {
2452         int error = 0;
2453         struct inode *target;
2454
2455         /*
2456          * If we are going to change the parent - check write permissions,
2457          * we'll need to flip '..'.
2458          */
2459         if (new_dir != old_dir) {
2460                 error = permission(old_dentry->d_inode, MAY_WRITE, NULL);
2461                 if (error)
2462                         return error;
2463         }
2464
2465         error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
2466         if (error)
2467                 return error;
2468
2469         target = new_dentry->d_inode;
2470         if (target) {
2471                 mutex_lock(&target->i_mutex);
2472                 dentry_unhash(new_dentry);
2473         }
2474         if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
2475                 error = -EBUSY;
2476         else 
2477                 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
2478         if (target) {
2479                 if (!error)
2480                         target->i_flags |= S_DEAD;
2481                 mutex_unlock(&target->i_mutex);
2482                 if (d_unhashed(new_dentry))
2483                         d_rehash(new_dentry);
2484                 dput(new_dentry);
2485         }
2486         if (!error)
2487                 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))
2488                         d_move(old_dentry,new_dentry);
2489         return error;
2490 }
2491
2492 static int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
2493                             struct inode *new_dir, struct dentry *new_dentry)
2494 {
2495         struct inode *target;
2496         int error;
2497
2498         error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
2499         if (error)
2500                 return error;
2501
2502         dget(new_dentry);
2503         target = new_dentry->d_inode;
2504         if (target)
2505                 mutex_lock(&target->i_mutex);
2506         if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
2507                 error = -EBUSY;
2508         else
2509                 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
2510         if (!error) {
2511                 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))
2512                         d_move(old_dentry, new_dentry);
2513         }
2514         if (target)
2515                 mutex_unlock(&target->i_mutex);
2516         dput(new_dentry);
2517         return error;
2518 }
2519
2520 int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2521                struct inode *new_dir, struct dentry *new_dentry)
2522 {
2523         int error;
2524         int is_dir = S_ISDIR(old_dentry->d_inode->i_mode);
2525         const char *old_name;
2526
2527         if (old_dentry->d_inode == new_dentry->d_inode)
2528                 return 0;
2529  
2530         error = may_delete(old_dir, old_dentry, is_dir);
2531         if (error)
2532                 return error;
2533
2534         if (!new_dentry->d_inode)
2535                 error = may_create(new_dir, new_dentry, NULL);
2536         else
2537                 error = may_delete(new_dir, new_dentry, is_dir);
2538         if (error)
2539                 return error;
2540
2541         if (!old_dir->i_op || !old_dir->i_op->rename)
2542                 return -EPERM;
2543
2544         DQUOT_INIT(old_dir);
2545         DQUOT_INIT(new_dir);
2546
2547         old_name = fsnotify_oldname_init(old_dentry->d_name.name);
2548
2549         if (is_dir)
2550                 error = vfs_rename_dir(old_dir,old_dentry,new_dir,new_dentry);
2551         else
2552                 error = vfs_rename_other(old_dir,old_dentry,new_dir,new_dentry);
2553         if (!error) {
2554                 const char *new_name = old_dentry->d_name.name;
2555                 fsnotify_move(old_dir, new_dir, old_name, new_name, is_dir,
2556                               new_dentry->d_inode, old_dentry);
2557         }
2558         fsnotify_oldname_free(old_name);
2559
2560         return error;
2561 }
2562
2563 static int do_rename(int olddfd, const char *oldname,
2564                         int newdfd, const char *newname)
2565 {
2566         int error = 0;
2567         struct dentry * old_dir, * new_dir;
2568         struct dentry * old_dentry, *new_dentry;
2569         struct dentry * trap;
2570         struct nameidata oldnd, newnd;
2571
2572         error = do_path_lookup(olddfd, oldname, LOOKUP_PARENT, &oldnd);
2573         if (error)
2574                 goto exit;
2575
2576         error = do_path_lookup(newdfd, newname, LOOKUP_PARENT, &newnd);
2577         if (error)
2578                 goto exit1;
2579
2580         error = -EXDEV;
2581         if (oldnd.mnt != newnd.mnt)
2582                 goto exit2;
2583
2584         old_dir = oldnd.dentry;
2585         error = -EBUSY;
2586         if (oldnd.last_type != LAST_NORM)
2587                 goto exit2;
2588
2589         new_dir = newnd.dentry;
2590         if (newnd.last_type != LAST_NORM)
2591                 goto exit2;
2592
2593         trap = lock_rename(new_dir, old_dir);
2594
2595         old_dentry = lookup_hash(&oldnd);
2596         error = PTR_ERR(old_dentry);
2597         if (IS_ERR(old_dentry))
2598                 goto exit3;
2599         /* source must exist */
2600         error = -ENOENT;
2601         if (!old_dentry->d_inode)
2602                 goto exit4;
2603         /* unless the source is a directory trailing slashes give -ENOTDIR */
2604         if (!S_ISDIR(old_dentry->d_inode->i_mode)) {
2605                 error = -ENOTDIR;
2606                 if (oldnd.last.name[oldnd.last.len])
2607                         goto exit4;
2608                 if (newnd.last.name[newnd.last.len])
2609                         goto exit4;
2610         }
2611         /* source should not be ancestor of target */
2612         error = -EINVAL;
2613         if (old_dentry == trap)
2614                 goto exit4;
2615         new_dentry = lookup_hash(&newnd);
2616         error = PTR_ERR(new_dentry);
2617         if (IS_ERR(new_dentry))
2618                 goto exit4;
2619         /* target should not be an ancestor of source */
2620         error = -ENOTEMPTY;
2621         if (new_dentry == trap)
2622                 goto exit5;
2623
2624         error = vfs_rename(old_dir->d_inode, old_dentry,
2625                                    new_dir->d_inode, new_dentry);
2626 exit5:
2627         dput(new_dentry);
2628 exit4:
2629         dput(old_dentry);
2630 exit3:
2631         unlock_rename(new_dir, old_dir);
2632 exit2:
2633         path_release(&newnd);
2634 exit1:
2635         path_release(&oldnd);
2636 exit:
2637         return error;
2638 }
2639
2640 asmlinkage long sys_renameat(int olddfd, const char __user *oldname,
2641                              int newdfd, const char __user *newname)
2642 {
2643         int error;
2644         char * from;
2645         char * to;
2646
2647         from = getname(oldname);
2648         if(IS_ERR(from))
2649                 return PTR_ERR(from);
2650         to = getname(newname);
2651         error = PTR_ERR(to);
2652         if (!IS_ERR(to)) {
2653                 error = do_rename(olddfd, from, newdfd, to);
2654                 putname(to);
2655         }
2656         putname(from);
2657         return error;
2658 }
2659
2660 asmlinkage long sys_rename(const char __user *oldname, const char __user *newname)
2661 {
2662         return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname);
2663 }
2664
2665 int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link)
2666 {
2667         int len;
2668
2669         len = PTR_ERR(link);
2670         if (IS_ERR(link))
2671                 goto out;
2672
2673         len = strlen(link);
2674         if (len > (unsigned) buflen)
2675                 len = buflen;
2676         if (copy_to_user(buffer, link, len))
2677                 len = -EFAULT;
2678 out:
2679         return len;
2680 }
2681
2682 /*
2683  * A helper for ->readlink().  This should be used *ONLY* for symlinks that
2684  * have ->follow_link() touching nd only in nd_set_link().  Using (or not
2685  * using) it for any given inode is up to filesystem.
2686  */
2687 int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
2688 {
2689         struct nameidata nd;
2690         void *cookie;
2691
2692         nd.depth = 0;
2693         cookie = dentry->d_inode->i_op->follow_link(dentry, &nd);
2694         if (!IS_ERR(cookie)) {
2695                 int res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd));
2696                 if (dentry->d_inode->i_op->put_link)
2697                         dentry->d_inode->i_op->put_link(dentry, &nd, cookie);
2698                 cookie = ERR_PTR(res);
2699         }
2700         return PTR_ERR(cookie);
2701 }
2702
2703 int vfs_follow_link(struct nameidata *nd, const char *link)
2704 {
2705         return __vfs_follow_link(nd, link);
2706 }
2707
2708 /* get the link contents into pagecache */
2709 static char *page_getlink(struct dentry * dentry, struct page **ppage)
2710 {
2711         struct page * page;
2712         struct address_space *mapping = dentry->d_inode->i_mapping;
2713         page = read_mapping_page(mapping, 0, NULL);
2714         if (IS_ERR(page))
2715                 return (char*)page;
2716         *ppage = page;
2717         return kmap(page);
2718 }
2719
2720 int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
2721 {
2722         struct page *page = NULL;
2723         char *s = page_getlink(dentry, &page);
2724         int res = vfs_readlink(dentry,buffer,buflen,s);
2725         if (page) {
2726                 kunmap(page);
2727                 page_cache_release(page);
2728         }
2729         return res;
2730 }
2731
2732 void *page_follow_link_light(struct dentry *dentry, struct nameidata *nd)
2733 {
2734         struct page *page = NULL;
2735         nd_set_link(nd, page_getlink(dentry, &page));
2736         return page;
2737 }
2738
2739 void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
2740 {
2741         struct page *page = cookie;
2742
2743         if (page) {
2744                 kunmap(page);
2745                 page_cache_release(page);
2746         }
2747 }
2748
2749 int __page_symlink(struct inode *inode, const char *symname, int len,
2750                 gfp_t gfp_mask)
2751 {
2752         struct address_space *mapping = inode->i_mapping;
2753         struct page *page;
2754         void *fsdata;
2755         int err;
2756         char *kaddr;
2757
2758 retry:
2759         err = pagecache_write_begin(NULL, mapping, 0, len-1,
2760                                 AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata);
2761         if (err)
2762                 goto fail;
2763
2764         kaddr = kmap_atomic(page, KM_USER0);
2765         memcpy(kaddr, symname, len-1);
2766         kunmap_atomic(kaddr, KM_USER0);
2767
2768         err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
2769                                                         page, fsdata);
2770         if (err < 0)
2771                 goto fail;
2772         if (err < len-1)
2773                 goto retry;
2774
2775         mark_inode_dirty(inode);
2776         return 0;
2777 fail:
2778         return err;
2779 }
2780
2781 int page_symlink(struct inode *inode, const char *symname, int len)
2782 {
2783         return __page_symlink(inode, symname, len,
2784                         mapping_gfp_mask(inode->i_mapping));
2785 }
2786
2787 const struct inode_operations page_symlink_inode_operations = {
2788         .readlink       = generic_readlink,
2789         .follow_link    = page_follow_link_light,
2790         .put_link       = page_put_link,
2791 };
2792
2793 EXPORT_SYMBOL(__user_walk);
2794 EXPORT_SYMBOL(__user_walk_fd);
2795 EXPORT_SYMBOL(follow_down);
2796 EXPORT_SYMBOL(follow_up);
2797 EXPORT_SYMBOL(get_write_access); /* binfmt_aout */
2798 EXPORT_SYMBOL(getname);
2799 EXPORT_SYMBOL(lock_rename);
2800 EXPORT_SYMBOL(lookup_one_len);
2801 EXPORT_SYMBOL(page_follow_link_light);
2802 EXPORT_SYMBOL(page_put_link);
2803 EXPORT_SYMBOL(page_readlink);
2804 EXPORT_SYMBOL(__page_symlink);
2805 EXPORT_SYMBOL(page_symlink);
2806 EXPORT_SYMBOL(page_symlink_inode_operations);
2807 EXPORT_SYMBOL(path_lookup);
2808 EXPORT_SYMBOL(vfs_path_lookup);
2809 EXPORT_SYMBOL(path_release);
2810 EXPORT_SYMBOL(permission);
2811 EXPORT_SYMBOL(vfs_permission);
2812 EXPORT_SYMBOL(file_permission);
2813 EXPORT_SYMBOL(unlock_rename);
2814 EXPORT_SYMBOL(vfs_create);
2815 EXPORT_SYMBOL(vfs_follow_link);
2816 EXPORT_SYMBOL(vfs_link);
2817 EXPORT_SYMBOL(vfs_mkdir);
2818 EXPORT_SYMBOL(vfs_mknod);
2819 EXPORT_SYMBOL(generic_permission);
2820 EXPORT_SYMBOL(vfs_readlink);
2821 EXPORT_SYMBOL(vfs_rename);
2822 EXPORT_SYMBOL(vfs_rmdir);
2823 EXPORT_SYMBOL(vfs_symlink);
2824 EXPORT_SYMBOL(vfs_unlink);
2825 EXPORT_SYMBOL(dentry_unhash);
2826 EXPORT_SYMBOL(generic_readlink);