4 * Copyright (C) 1991, 1992 Linus Torvalds
8 * Some corrections by tytso.
11 /* [Feb 1997 T. Schoebel-Theuer] Complete rewrite of the pathname
16 #include <linux/proc_fs.h>
17 #include <linux/smp_lock.h>
18 #include <linux/quotaops.h>
20 #include <asm/uaccess.h>
21 #include <asm/unaligned.h>
22 #include <asm/semaphore.h>
24 #include <asm/pgtable.h>
26 #include <asm/namei.h>
28 /* This can be removed after the beta phase. */
29 #define CACHE_SUPERVISE /* debug the correctness of dcache entries */
30 #undef DEBUG /* some other debugging */
33 #define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
35 /* [Feb-1997 T. Schoebel-Theuer]
36 * Fundamental changes in the pathname lookup mechanisms (namei)
37 * were necessary because of omirr. The reason is that omirr needs
38 * to know the _real_ pathname, not the user-supplied one, in case
39 * of symlinks (and also when transname replacements occur).
41 * The new code replaces the old recursive symlink resolution with
42 * an iterative one (in case of non-nested symlink chains). It does
43 * this with calls to <fs>_follow_link().
44 * As a side effect, dir_namei(), _namei() and follow_link() are now
45 * replaced with a single function lookup_dentry() that can handle all
46 * the special cases of the former code.
48 * With the new dcache, the pathname is stored at each inode, at least as
49 * long as the refcount of the inode is positive. As a side effect, the
50 * size of the dcache depends on the inode cache and thus is dynamic.
52 * [29-Apr-1998 C. Scott Ananian] Updated above description of symlink
53 * resolution to correspond with current state of the code.
55 * Note that the symlink resolution is not *completely* iterative.
56 * There is still a significant amount of tail- and mid- recursion in
57 * the algorithm. Also, note that <fs>_readlink() is not used in
58 * lookup_dentry(): lookup_dentry() on the result of <fs>_readlink()
59 * may return different results than <fs>_follow_link(). Many virtual
60 * filesystems (including /proc) exhibit this behavior.
63 /* [24-Feb-97 T. Schoebel-Theuer] Side effects caused by new implementation:
64 * New symlink semantics: when open() is called with flags O_CREAT | O_EXCL
65 * and the name already exists in form of a symlink, try to create the new
66 * name indicated by the symlink. The old code always complained that the
67 * name already exists, due to not following the symlink even if its target
68 * is nonexistent. The new semantics affects also mknod() and link() when
69 * the name is a symlink pointing to a non-existant name.
71 * I don't know which semantics is the right one, since I have no access
72 * to standards. But I found by trial that HP-UX 9.0 has the full "new"
73 * semantics implemented, while SunOS 4.1.1 and Solaris (SunOS 5.4) have the
74 * "old" one. Personally, I think the new semantics is much more logical.
75 * Note that "ln old new" where "new" is a symlink pointing to a non-existing
76 * file does succeed in both HP-UX and SunOs, but not in Solaris
77 * and in the old Linux semantics.
80 /* [16-Dec-97 Kevin Buhr] For security reasons, we change some symlink
81 * semantics. See the comments in "open_namei" and "do_link" below.
83 * [10-Sep-98 Alan Modra] Another symlink change.
86 /* In order to reduce some races, while at the same time doing additional
87 * checking and hopefully speeding things up, we copy filenames to the
88 * kernel data space before using them..
90 * POSIX.1 2.4: an empty pathname is invalid (ENOENT).
92 static inline int do_getname(const char *filename
, char *page
)
95 unsigned long len
= PAGE_SIZE
;
97 if ((unsigned long) filename
>= TASK_SIZE
) {
98 if (!segment_eq(get_fs(), KERNEL_DS
))
100 } else if (TASK_SIZE
- (unsigned long) filename
< PAGE_SIZE
)
101 len
= TASK_SIZE
- (unsigned long) filename
;
103 retval
= strncpy_from_user((char *)page
, filename
, len
);
107 return -ENAMETOOLONG
;
113 char * getname(const char * filename
)
117 result
= ERR_PTR(-ENOMEM
);
120 int retval
= do_getname(filename
, tmp
);
125 result
= ERR_PTR(retval
);
134 * is used to check for read/write/execute permissions on a file.
135 * We use "fsuid" for this, letting us set arbitrary permissions
136 * for filesystem access without changing the "normal" uids which
137 * are used for other things..
139 int permission(struct inode
* inode
,int mask
)
141 int mode
= inode
->i_mode
;
143 if (inode
->i_op
&& inode
->i_op
->permission
)
144 return inode
->i_op
->permission(inode
, mask
);
145 else if ((mask
& S_IWOTH
) && IS_RDONLY(inode
) &&
146 (S_ISREG(mode
) || S_ISDIR(mode
) || S_ISLNK(mode
)))
147 return -EROFS
; /* Nobody gets write access to a read-only fs */
148 else if ((mask
& S_IWOTH
) && IS_IMMUTABLE(inode
))
149 return -EACCES
; /* Nobody gets write access to an immutable file */
150 else if (current
->fsuid
== inode
->i_uid
)
152 else if (in_group_p(inode
->i_gid
))
154 if (((mode
& mask
& S_IRWXO
) == mask
) || capable(CAP_DAC_OVERRIDE
))
156 /* read and search access */
157 if ((mask
== S_IROTH
) ||
158 (S_ISDIR(mode
) && !(mask
& ~(S_IROTH
| S_IXOTH
))))
159 if (capable(CAP_DAC_READ_SEARCH
))
165 * get_write_access() gets write permission for a file.
166 * put_write_access() releases this write permission.
167 * This is used for regular files.
168 * We cannot support write (and maybe mmap read-write shared) accesses and
169 * MAP_DENYWRITE mmappings simultaneously. The i_writecount field of an inode
170 * can have the following values:
171 * 0: no writers, no VM_DENYWRITE mappings
172 * < 0: (-i_writecount) vm_area_structs with VM_DENYWRITE set exist
173 * > 0: (i_writecount) users are writing to the file.
175 * WARNING: as soon as we will move get_write_access(), do_mmap() or
176 * prepare_binfmt() out of the big lock we will need a spinlock protecting
177 * the checks in all 3. For the time being it is not needed.
179 int get_write_access(struct inode
* inode
)
181 if (atomic_read(&inode
->i_writecount
) < 0)
183 atomic_inc(&inode
->i_writecount
);
187 void put_write_access(struct inode
* inode
)
189 atomic_dec(&inode
->i_writecount
);
193 * "." and ".." are special - ".." especially so because it has to be able
194 * to know about the current root directory and parent relationships
196 static struct dentry
* reserved_lookup(struct dentry
* parent
, struct qstr
* name
)
198 struct dentry
*result
= NULL
;
199 if (name
->name
[0] == '.') {
204 if (name
->name
[1] != '.')
207 if (parent
!= current
->fs
->root
)
208 parent
= parent
->d_covers
->d_parent
;
218 * Internal lookup() using the new generic dcache.
220 static struct dentry
* cached_lookup(struct dentry
* parent
, struct qstr
* name
, int flags
)
222 struct dentry
* dentry
= d_lookup(parent
, name
);
224 if (dentry
&& dentry
->d_op
&& dentry
->d_op
->d_revalidate
) {
225 if (!dentry
->d_op
->d_revalidate(dentry
, flags
) && !d_invalidate(dentry
)) {
234 * This is called when everything else fails, and we actually have
235 * to go to the low-level filesystem to find out what we should do..
237 * We get the directory semaphore, and after getting that we also
238 * make sure that nobody added the entry to the dcache in the meantime..
240 static struct dentry
* real_lookup(struct dentry
* parent
, struct qstr
* name
, int flags
)
242 struct dentry
* result
;
243 struct inode
*dir
= parent
->d_inode
;
247 * First re-do the cached lookup just in case it was created
248 * while we waited for the directory semaphore..
250 * FIXME! This could use version numbering or similar to
251 * avoid unnecessary cache lookups.
253 result
= cached_lookup(parent
, name
, flags
);
255 struct dentry
* dentry
= d_alloc(parent
, name
);
256 result
= ERR_PTR(-ENOMEM
);
258 result
= dir
->i_op
->lookup(dir
, dentry
);
269 static struct dentry
* do_follow_link(struct dentry
*base
, struct dentry
*dentry
, unsigned int follow
)
271 struct inode
* inode
= dentry
->d_inode
;
273 if ((follow
& LOOKUP_FOLLOW
)
274 && inode
&& inode
->i_op
&& inode
->i_op
->follow_link
) {
275 if (current
->link_count
< 5) {
276 struct dentry
* result
;
278 current
->link_count
++;
279 /* This eats the base */
280 result
= inode
->i_op
->follow_link(dentry
, base
, follow
);
281 current
->link_count
--;
286 dentry
= ERR_PTR(-ELOOP
);
292 static inline struct dentry
* follow_mount(struct dentry
* dentry
)
294 struct dentry
* mnt
= dentry
->d_mounts
;
307 * This is the basic name resolution function, turning a pathname
308 * into the final dentry.
310 struct dentry
* lookup_dentry(const char * name
, struct dentry
* base
, unsigned int lookup_flags
)
312 struct dentry
* dentry
;
320 } while (*name
== '/');
321 __prefix_lookup_dentry(name
, lookup_flags
);
322 base
= dget(current
->fs
->root
);
324 base
= dget(current
->fs
->pwd
);
330 inode
= base
->d_inode
;
331 lookup_flags
&= LOOKUP_FOLLOW
| LOOKUP_DIRECTORY
| LOOKUP_SLASHOK
;
333 /* At this point we know we have a real path component. */
341 err
= permission(inode
, MAY_EXEC
);
342 dentry
= ERR_PTR(err
);
347 c
= *(const unsigned char *)name
;
349 hash
= init_name_hash();
352 hash
= partial_name_hash(c
, hash
);
353 c
= *(const unsigned char *)name
;
354 } while (c
&& (c
!= '/'));
355 this.len
= name
- (const char *) this.name
;
356 this.hash
= end_name_hash(hash
);
358 /* remove trailing slashes? */
359 flags
= lookup_flags
;
363 flags
|= LOOKUP_FOLLOW
| LOOKUP_DIRECTORY
;
366 } while (tmp
== '/');
368 flags
|= LOOKUP_CONTINUE
;
372 * See if the low-level filesystem might want
373 * to use its own hash..
375 if (base
->d_op
&& base
->d_op
->d_hash
) {
377 error
= base
->d_op
->d_hash(base
, &this);
379 dentry
= ERR_PTR(error
);
384 /* This does the actual lookups.. */
385 dentry
= reserved_lookup(base
, &this);
387 dentry
= cached_lookup(base
, &this, flags
);
389 dentry
= real_lookup(base
, &this, flags
);
395 /* Check mountpoints.. */
396 dentry
= follow_mount(dentry
);
398 base
= do_follow_link(base
, dentry
, flags
);
402 inode
= base
->d_inode
;
403 if (flags
& LOOKUP_DIRECTORY
) {
406 dentry
= ERR_PTR(-ENOTDIR
);
407 if (!inode
->i_op
|| !inode
->i_op
->lookup
)
409 if (flags
& LOOKUP_CONTINUE
)
415 * The case of a nonexisting file is special.
417 * In the middle of a pathname lookup (ie when
418 * LOOKUP_CONTINUE is set), it's an obvious
419 * error and returns ENOENT.
421 * At the end of a pathname lookup it's legal,
422 * and we return a negative dentry. However, we
423 * get here only if there were trailing slashes,
424 * which is legal only if we know it's supposed
425 * to be a directory (ie "mkdir"). Thus the
426 * LOOKUP_SLASHOK flag.
429 dentry
= ERR_PTR(-ENOENT
);
430 if (flags
& LOOKUP_CONTINUE
)
432 if (flags
& LOOKUP_SLASHOK
)
443 * is used by most simple commands to get the inode of a specified name.
444 * Open, link etc use their own routines, but this is enough for things
447 * namei exists in two versions: namei/lnamei. The only difference is
448 * that namei follows links, while lnamei does not.
450 struct dentry
* __namei(const char *pathname
, unsigned int lookup_flags
)
453 struct dentry
*dentry
;
455 name
= getname(pathname
);
456 dentry
= (struct dentry
*) name
;
458 dentry
= lookup_dentry(name
, NULL
, lookup_flags
);
460 if (!IS_ERR(dentry
)) {
461 if (!dentry
->d_inode
) {
463 dentry
= ERR_PTR(-ENOENT
);
471 * It's inline, so penalty for filesystems that don't use sticky bit is
474 static inline int check_sticky(struct inode
*dir
, struct inode
*inode
)
476 if (!(dir
->i_mode
& S_ISVTX
))
478 if (inode
->i_uid
== current
->fsuid
)
480 if (dir
->i_uid
== current
->fsuid
)
482 return !capable(CAP_FOWNER
);
486 * Check whether we can remove a link victim from directory dir, check
487 * whether the type of victim is right.
488 * 1. We can't do it if dir is read-only (done in permission())
489 * 2. We should have write and exec permissions on dir
490 * 3. We can't remove anything from append-only dir
491 * 4. We can't do anything with immutable dir (done in permission())
492 * 5. If the sticky bit on dir is set we should either
493 * a. be owner of dir, or
494 * b. be owner of victim, or
495 * c. have CAP_FOWNER capability
496 * 6. If the victim is append-only or immutable we can't do antyhing with
497 * links pointing to it.
498 * 7. If we were asked to remove a directory and victim isn't one - ENOTDIR.
499 * 8. If we were asked to remove a non-directory and victim isn't one - EISDIR.
500 * 9. We can't remove a root or mountpoint.
502 static inline int may_delete(struct inode
*dir
,struct dentry
*victim
, int isdir
)
505 if (!victim
->d_inode
|| victim
->d_parent
->d_inode
!= dir
)
507 error
= permission(dir
,MAY_WRITE
| MAY_EXEC
);
512 if (check_sticky(dir
, victim
->d_inode
)||IS_APPEND(victim
->d_inode
)||
513 IS_IMMUTABLE(victim
->d_inode
))
516 if (!S_ISDIR(victim
->d_inode
->i_mode
))
520 if (victim
->d_mounts
!= victim
->d_covers
)
522 } else if (S_ISDIR(victim
->d_inode
->i_mode
))
527 /* Check whether we can create an object with dentry child in directory
529 * 1. We can't do it if child already exists (open has special treatment for
530 * this case, but since we are inlined it's OK)
531 * 2. We can't do it if dir is read-only (done in permission())
532 * 3. We should have write and exec permissions on dir
533 * 4. We can't do it if dir is immutable (done in permission())
535 static inline int may_create(struct inode
*dir
, struct dentry
*child
) {
538 return permission(dir
,MAY_WRITE
| MAY_EXEC
);
541 static inline struct dentry
*get_parent(struct dentry
*dentry
)
543 return dget(dentry
->d_parent
);
546 static inline void unlock_dir(struct dentry
*dir
)
548 up(&dir
->d_inode
->i_sem
);
553 * We need to do a check-parent every time
554 * after we have locked the parent - to verify
555 * that the parent is still our parent and
556 * that we are still hashed onto it..
558 * This is requied in case two processes race
559 * on removing (or moving) the same entry: the
560 * parent lock will serialize them, but the
561 * other process will be too late..
563 #define check_parent(dir, dentry) \
564 ((dir) == (dentry)->d_parent && !list_empty(&dentry->d_hash))
567 * Locking the parent is needed to:
568 * - serialize directory operations
569 * - make sure the parent doesn't change from
570 * under us in the middle of an operation.
572 * NOTE! Right now we'd rather use a "struct inode"
573 * for this, but as I expect things to move toward
574 * using dentries instead for most things it is
575 * probably better to start with the conceptually
576 * better interface of relying on a path of dentries.
578 static inline struct dentry
*lock_parent(struct dentry
*dentry
)
580 struct dentry
*dir
= dget(dentry
->d_parent
);
582 down(&dir
->d_inode
->i_sem
);
587 * Whee.. Deadlock country. Happily there are only two VFS
588 * operations that do this..
590 static inline void double_lock(struct dentry
*d1
, struct dentry
*d2
)
592 struct semaphore
*s1
= &d1
->d_inode
->i_sem
;
593 struct semaphore
*s2
= &d2
->d_inode
->i_sem
;
596 if ((unsigned long) s1
< (unsigned long) s2
) {
597 struct semaphore
*tmp
= s2
;
605 static inline void double_unlock(struct dentry
*d1
, struct dentry
*d2
)
607 struct semaphore
*s1
= &d1
->d_inode
->i_sem
;
608 struct semaphore
*s2
= &d2
->d_inode
->i_sem
;
619 * Special case: O_CREAT|O_EXCL implies O_NOFOLLOW for security
622 * O_DIRECTORY translates into forcing a directory lookup.
624 static inline int lookup_flags(unsigned int f
)
626 unsigned long retval
= LOOKUP_FOLLOW
;
629 retval
&= ~LOOKUP_FOLLOW
;
631 if ((f
& (O_CREAT
|O_EXCL
)) == (O_CREAT
|O_EXCL
))
632 retval
&= ~LOOKUP_FOLLOW
;
635 retval
|= LOOKUP_DIRECTORY
;
640 int vfs_create(struct inode
*dir
, struct dentry
*dentry
, int mode
)
644 error
= may_create(dir
, dentry
);
648 error
= -EACCES
; /* shouldn't it be ENOSYS? */
649 if (!dir
->i_op
|| !dir
->i_op
->create
)
653 error
= dir
->i_op
->create(dir
, dentry
, mode
);
661 * namei for open - this is in fact almost the whole open-routine.
663 * Note that the low bits of "flag" aren't the same as in the open
664 * system call - they are 00 - no permissions needed
665 * 01 - read permission needed
666 * 10 - write permission needed
667 * 11 - read/write permissions needed
668 * which is a lot more logical, and also allows the "no perm" needed
669 * for symlinks (where the permissions are checked later).
671 struct dentry
* open_namei(const char * pathname
, int flag
, int mode
)
675 struct dentry
*dentry
;
677 mode
&= S_IALLUGO
& ~current
->fs
->umask
;
680 dentry
= lookup_dentry(pathname
, NULL
, lookup_flags(flag
));
684 acc_mode
= ACC_MODE(flag
);
685 if (flag
& O_CREAT
) {
688 if (dentry
->d_inode
) {
689 if (!(flag
& O_EXCL
))
695 dir
= lock_parent(dentry
);
696 if (!check_parent(dir
, dentry
)) {
698 * Really nasty race happened. What's the
699 * right error code? We had a dentry, but
700 * before we could use it it was removed
701 * by somebody else. We could just re-try
702 * everything, I guess.
704 * ENOENT is definitely wrong.
712 * Somebody might have created the file while we
713 * waited for the directory lock.. So we have to
714 * re-do the existence test.
716 if (dentry
->d_inode
) {
721 error
= vfs_create(dir
->d_inode
, dentry
,mode
);
722 /* Don't check for write permission, don't truncate */
733 inode
= dentry
->d_inode
;
738 if (S_ISLNK(inode
->i_mode
))
742 if (S_ISDIR(inode
->i_mode
) && (flag
& FMODE_WRITE
))
745 error
= permission(inode
,acc_mode
);
750 * FIFO's, sockets and device files are special: they don't
751 * actually live on the filesystem itself, and as such you
752 * can write to them even if the filesystem is read-only.
754 if (S_ISFIFO(inode
->i_mode
) || S_ISSOCK(inode
->i_mode
)) {
756 } else if (S_ISBLK(inode
->i_mode
) || S_ISCHR(inode
->i_mode
)) {
764 if (IS_RDONLY(inode
) && (flag
& 2))
768 * An append-only file must be opened in append mode for writing.
771 if (IS_APPEND(inode
)) {
772 if ((flag
& FMODE_WRITE
) && !(flag
& O_APPEND
))
778 if (flag
& O_TRUNC
) {
779 error
= get_write_access(inode
);
784 * Refuse to truncate files with mandatory locks held on them.
786 error
= locks_verify_locked(inode
);
790 error
= do_truncate(dentry
, 0);
792 put_write_access(inode
);
796 if (flag
& FMODE_WRITE
)
803 return ERR_PTR(error
);
806 struct dentry
* do_mknod(const char * filename
, int mode
, dev_t dev
)
810 struct dentry
*dentry
, *retval
;
812 mode
&= ~current
->fs
->umask
;
813 dentry
= lookup_dentry(filename
, NULL
, LOOKUP_FOLLOW
);
817 dir
= lock_parent(dentry
);
819 if (!check_parent(dir
, dentry
))
822 error
= may_create(dir
->d_inode
, dentry
);
827 if (!dir
->d_inode
->i_op
|| !dir
->d_inode
->i_op
->mknod
)
830 DQUOT_INIT(dir
->d_inode
);
831 error
= dir
->d_inode
->i_op
->mknod(dir
->d_inode
, dentry
, mode
, dev
);
833 retval
= ERR_PTR(error
);
835 retval
= dget(dentry
);
841 asmlinkage
int sys_mknod(const char * filename
, int mode
, dev_t dev
)
845 struct dentry
* dentry
;
849 if (S_ISDIR(mode
) || (!S_ISFIFO(mode
) && !capable(CAP_SYS_ADMIN
)))
851 tmp
= getname(filename
);
852 error
= PTR_ERR(tmp
);
857 switch (mode
& S_IFMT
) {
859 mode
|= S_IFREG
; /* fallthrough */
861 mode
&= ~current
->fs
->umask
;
862 dentry
= lookup_dentry(filename
, NULL
, LOOKUP_FOLLOW
);
864 error
= PTR_ERR(dentry
);
866 struct dentry
*dir
= lock_parent(dentry
);
868 if (check_parent(dir
, dentry
))
869 error
= vfs_create(dir
->d_inode
, dentry
, mode
);
873 case S_IFCHR
: case S_IFBLK
: case S_IFIFO
: case S_IFSOCK
:
874 dentry
= do_mknod(tmp
,mode
,dev
);
875 error
= PTR_ERR(dentry
);
876 if (!IS_ERR(dentry
)) {
889 static inline int do_mkdir(const char * pathname
, int mode
)
893 struct dentry
*dentry
;
895 dentry
= lookup_dentry(pathname
, NULL
, LOOKUP_SLASHOK
);
896 error
= PTR_ERR(dentry
);
901 * EEXIST is kind of a strange error code to
902 * return, but basically if the dentry was moved
903 * or unlinked while we locked the parent, we
904 * do know that it _did_ exist before, and as
905 * such it makes perfect sense.. In contrast,
906 * ENOENT doesn't make sense for mkdir.
908 dir
= lock_parent(dentry
);
910 if (!check_parent(dir
, dentry
))
913 error
= may_create(dir
->d_inode
, dentry
);
918 if (!dir
->d_inode
->i_op
|| !dir
->d_inode
->i_op
->mkdir
)
921 DQUOT_INIT(dir
->d_inode
);
922 mode
&= (S_IRWXUGO
|S_ISVTX
) & ~current
->fs
->umask
;
923 error
= dir
->d_inode
->i_op
->mkdir(dir
->d_inode
, dentry
, mode
);
932 asmlinkage
int sys_mkdir(const char * pathname
, int mode
)
938 tmp
= getname(pathname
);
939 error
= PTR_ERR(tmp
);
941 error
= do_mkdir(tmp
,mode
);
948 int vfs_rmdir(struct inode
*dir
, struct dentry
*dentry
)
952 error
= may_delete(dir
, dentry
, 1);
956 if (!dir
->i_op
|| !dir
->i_op
->rmdir
)
962 * We try to drop the dentry early: we should have
963 * a usage count of 2 if we're the only user of this
964 * dentry, and if that is true (possibly after pruning
965 * the dcache), then we drop the dentry now.
967 * A low-level filesystem can, if it choses, legally
970 * if (!list_empty(&dentry->d_hash))
973 * if it cannot handle the case of removing a directory
974 * that is still in use by something else..
976 switch (dentry
->d_count
) {
978 shrink_dcache_parent(dentry
);
979 if (dentry
->d_count
!= 2)
985 error
= dir
->i_op
->rmdir(dir
, dentry
);
990 static inline int do_rmdir(const char * name
)
994 struct dentry
*dentry
;
996 dentry
= lookup_dentry(name
, NULL
, 0);
997 error
= PTR_ERR(dentry
);
1002 if (!dentry
->d_inode
)
1005 dir
= dget(dentry
->d_parent
);
1008 * The dentry->d_count stuff confuses d_delete() enough to
1009 * not kill the inode from under us while it is locked. This
1010 * wouldn't be needed, except the dentry semaphore is really
1011 * in the inode, not in the dentry..
1014 double_lock(dir
, dentry
);
1017 if (check_parent(dir
, dentry
))
1018 error
= vfs_rmdir(dir
->d_inode
, dentry
);
1020 double_unlock(dentry
, dir
);
1027 asmlinkage
int sys_rmdir(const char * pathname
)
1033 tmp
= getname(pathname
);
1034 error
= PTR_ERR(tmp
);
1036 error
= do_rmdir(tmp
);
1043 int vfs_unlink(struct inode
*dir
, struct dentry
*dentry
)
1047 error
= may_delete(dir
, dentry
, 0);
1050 if (dir
->i_op
&& dir
->i_op
->unlink
) {
1052 error
= dir
->i_op
->unlink(dir
, dentry
);
1058 static inline int do_unlink(const char * name
)
1062 struct dentry
*dentry
;
1064 dentry
= lookup_dentry(name
, NULL
, 0);
1065 error
= PTR_ERR(dentry
);
1069 dir
= lock_parent(dentry
);
1071 if (check_parent(dir
, dentry
))
1072 error
= vfs_unlink(dir
->d_inode
, dentry
);
1080 asmlinkage
int sys_unlink(const char * pathname
)
1086 tmp
= getname(pathname
);
1087 error
= PTR_ERR(tmp
);
1089 error
= do_unlink(tmp
);
1096 static inline int do_symlink(const char * oldname
, const char * newname
)
1100 struct dentry
*dentry
;
1102 dentry
= lookup_dentry(newname
, NULL
, 0);
1104 error
= PTR_ERR(dentry
);
1108 dir
= lock_parent(dentry
);
1110 if (!check_parent(dir
, dentry
))
1113 error
= may_create(dir
->d_inode
, dentry
);
1118 if (!dir
->d_inode
->i_op
|| !dir
->d_inode
->i_op
->symlink
)
1121 DQUOT_INIT(dir
->d_inode
);
1122 error
= dir
->d_inode
->i_op
->symlink(dir
->d_inode
, dentry
, oldname
);
1131 asmlinkage
int sys_symlink(const char * oldname
, const char * newname
)
1137 from
= getname(oldname
);
1138 error
= PTR_ERR(from
);
1139 if (!IS_ERR(from
)) {
1141 to
= getname(newname
);
1142 error
= PTR_ERR(to
);
1144 error
= do_symlink(from
,to
);
1153 static inline int do_link(const char * oldname
, const char * newname
)
1155 struct dentry
*old_dentry
, *new_dentry
, *dir
;
1156 struct inode
*inode
;
1160 * Hardlinks are often used in delicate situations. We avoid
1161 * security-related surprises by not following symlinks on the
1164 * We don't follow them on the oldname either to be compatible
1165 * with linux 2.0, and to avoid hard-linking to directories
1166 * and other special files. --ADM
1168 old_dentry
= lookup_dentry(oldname
, NULL
, 0);
1169 error
= PTR_ERR(old_dentry
);
1170 if (IS_ERR(old_dentry
))
1173 new_dentry
= lookup_dentry(newname
, NULL
, 0);
1174 error
= PTR_ERR(new_dentry
);
1175 if (IS_ERR(new_dentry
))
1178 dir
= lock_parent(new_dentry
);
1180 if (!check_parent(dir
, new_dentry
))
1184 inode
= old_dentry
->d_inode
;
1188 error
= may_create(dir
->d_inode
, new_dentry
);
1193 if (dir
->d_inode
->i_dev
!= inode
->i_dev
)
1197 * A link to an append-only or immutable file cannot be created.
1200 if (IS_APPEND(inode
) || IS_IMMUTABLE(inode
))
1204 if (!dir
->d_inode
->i_op
|| !dir
->d_inode
->i_op
->link
)
1207 DQUOT_INIT(dir
->d_inode
);
1208 error
= dir
->d_inode
->i_op
->link(old_dentry
, dir
->d_inode
, new_dentry
);
1219 asmlinkage
int sys_link(const char * oldname
, const char * newname
)
1225 from
= getname(oldname
);
1226 error
= PTR_ERR(from
);
1227 if (!IS_ERR(from
)) {
1229 to
= getname(newname
);
1230 error
= PTR_ERR(to
);
1232 error
= do_link(from
,to
);
1241 int vfs_rename_dir(struct inode
*old_dir
, struct dentry
*old_dentry
,
1242 struct inode
*new_dir
, struct dentry
*new_dentry
)
1245 int need_rehash
= 0;
1247 if (old_dentry
->d_inode
== new_dentry
->d_inode
)
1250 error
= may_delete(old_dir
, old_dentry
, 1);
1254 if (new_dir
->i_dev
!= old_dir
->i_dev
)
1257 if (!new_dentry
->d_inode
)
1258 error
= may_create(new_dir
, new_dentry
);
1260 error
= may_delete(new_dir
, new_dentry
, 1);
1264 if (!old_dir
->i_op
|| !old_dir
->i_op
->rename
)
1268 * If we are going to change the parent - check write permissions,
1269 * we'll need to flip '..'.
1271 if (new_dir
!= old_dir
) {
1272 error
= permission(old_dentry
->d_inode
, MAY_WRITE
);
1277 DQUOT_INIT(old_dir
);
1278 DQUOT_INIT(new_dir
);
1279 down(&old_dir
->i_sb
->s_vfs_rename_sem
);
1281 if (is_subdir(new_dentry
, old_dentry
))
1283 if (new_dentry
->d_inode
) {
1285 if (d_invalidate(new_dentry
)<0)
1289 error
= old_dir
->i_op
->rename(old_dir
, old_dentry
, new_dir
, new_dentry
);
1291 d_rehash(new_dentry
);
1293 d_move(old_dentry
,new_dentry
);
1295 up(&old_dir
->i_sb
->s_vfs_rename_sem
);
1299 int vfs_rename_other(struct inode
*old_dir
, struct dentry
*old_dentry
,
1300 struct inode
*new_dir
, struct dentry
*new_dentry
)
1304 if (old_dentry
->d_inode
== new_dentry
->d_inode
)
1307 error
= may_delete(old_dir
, old_dentry
, 0);
1311 if (new_dir
->i_dev
!= old_dir
->i_dev
)
1314 if (!new_dentry
->d_inode
)
1315 error
= may_create(new_dir
, new_dentry
);
1317 error
= may_delete(new_dir
, new_dentry
, 0);
1321 if (!old_dir
->i_op
|| !old_dir
->i_op
->rename
)
1324 DQUOT_INIT(old_dir
);
1325 DQUOT_INIT(new_dir
);
1326 error
= old_dir
->i_op
->rename(old_dir
, old_dentry
, new_dir
, new_dentry
);
1329 /* The following d_move() should become unconditional */
1330 if (!(old_dir
->i_sb
->s_flags
& MS_ODD_RENAME
)) {
1331 d_move(old_dentry
, new_dentry
);
1336 int vfs_rename(struct inode
*old_dir
, struct dentry
*old_dentry
,
1337 struct inode
*new_dir
, struct dentry
*new_dentry
)
1339 if (S_ISDIR(old_dentry
->d_inode
->i_mode
))
1340 return vfs_rename_dir(old_dir
,old_dentry
,new_dir
,new_dentry
);
1342 return vfs_rename_other(old_dir
,old_dentry
,new_dir
,new_dentry
);
1345 static inline int do_rename(const char * oldname
, const char * newname
)
1348 struct dentry
* old_dir
, * new_dir
;
1349 struct dentry
* old_dentry
, *new_dentry
;
1351 old_dentry
= lookup_dentry(oldname
, NULL
, 0);
1353 error
= PTR_ERR(old_dentry
);
1354 if (IS_ERR(old_dentry
))
1358 if (!old_dentry
->d_inode
)
1362 unsigned int flags
= 0;
1363 if (S_ISDIR(old_dentry
->d_inode
->i_mode
))
1364 flags
= LOOKUP_SLASHOK
;
1365 new_dentry
= lookup_dentry(newname
, NULL
, flags
);
1368 error
= PTR_ERR(new_dentry
);
1369 if (IS_ERR(new_dentry
))
1372 new_dir
= get_parent(new_dentry
);
1373 old_dir
= get_parent(old_dentry
);
1375 double_lock(new_dir
, old_dir
);
1378 if (check_parent(old_dir
, old_dentry
) && check_parent(new_dir
, new_dentry
))
1379 error
= vfs_rename(old_dir
->d_inode
, old_dentry
,
1380 new_dir
->d_inode
, new_dentry
);
1382 double_unlock(new_dir
, old_dir
);
1390 asmlinkage
int sys_rename(const char * oldname
, const char * newname
)
1396 from
= getname(oldname
);
1397 error
= PTR_ERR(from
);
1398 if (!IS_ERR(from
)) {
1400 to
= getname(newname
);
1401 error
= PTR_ERR(to
);
1403 error
= do_rename(from
,to
);