namei.c (44e8ba93cf330f075178e31759100f367313790a) | namei.c (8de52778798fe39660a8d6b26f290e0c93202761) |
---|---|
1/* 2 * linux/fs/namei.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7/* 8 * Some corrections by tytso. --- 2555 unchanged lines hidden (view full) --- 2564SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev) 2565{ 2566 return sys_mknodat(AT_FDCWD, filename, mode, dev); 2567} 2568 2569int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) 2570{ 2571 int error = may_create(dir, dentry); | 1/* 2 * linux/fs/namei.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7/* 8 * Some corrections by tytso. --- 2555 unchanged lines hidden (view full) --- 2564SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev) 2565{ 2566 return sys_mknodat(AT_FDCWD, filename, mode, dev); 2567} 2568 2569int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) 2570{ 2571 int error = may_create(dir, dentry); |
2572 unsigned max_links = dir->i_sb->s_max_links; |
|
2572 2573 if (error) 2574 return error; 2575 2576 if (!dir->i_op->mkdir) 2577 return -EPERM; 2578 2579 mode &= (S_IRWXUGO|S_ISVTX); 2580 error = security_inode_mkdir(dir, dentry, mode); 2581 if (error) 2582 return error; 2583 | 2573 2574 if (error) 2575 return error; 2576 2577 if (!dir->i_op->mkdir) 2578 return -EPERM; 2579 2580 mode &= (S_IRWXUGO|S_ISVTX); 2581 error = security_inode_mkdir(dir, dentry, mode); 2582 if (error) 2583 return error; 2584 |
2585 if (max_links && dir->i_nlink >= max_links) 2586 return -EMLINK; 2587 |
|
2584 error = dir->i_op->mkdir(dir, dentry, mode); 2585 if (!error) 2586 fsnotify_mkdir(dir, dentry); 2587 return error; 2588} 2589 2590SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode) 2591{ --- 314 unchanged lines hidden (view full) --- 2906SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname) 2907{ 2908 return sys_symlinkat(oldname, AT_FDCWD, newname); 2909} 2910 2911int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry) 2912{ 2913 struct inode *inode = old_dentry->d_inode; | 2588 error = dir->i_op->mkdir(dir, dentry, mode); 2589 if (!error) 2590 fsnotify_mkdir(dir, dentry); 2591 return error; 2592} 2593 2594SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode) 2595{ --- 314 unchanged lines hidden (view full) --- 2910SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname) 2911{ 2912 return sys_symlinkat(oldname, AT_FDCWD, newname); 2913} 2914 2915int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry) 2916{ 2917 struct inode *inode = old_dentry->d_inode; |
2918 unsigned max_links = dir->i_sb->s_max_links; |
|
2914 int error; 2915 2916 if (!inode) 2917 return -ENOENT; 2918 2919 error = may_create(dir, new_dentry); 2920 if (error) 2921 return error; --- 14 unchanged lines hidden (view full) --- 2936 error = security_inode_link(old_dentry, dir, new_dentry); 2937 if (error) 2938 return error; 2939 2940 mutex_lock(&inode->i_mutex); 2941 /* Make sure we don't allow creating hardlink to an unlinked file */ 2942 if (inode->i_nlink == 0) 2943 error = -ENOENT; | 2919 int error; 2920 2921 if (!inode) 2922 return -ENOENT; 2923 2924 error = may_create(dir, new_dentry); 2925 if (error) 2926 return error; --- 14 unchanged lines hidden (view full) --- 2941 error = security_inode_link(old_dentry, dir, new_dentry); 2942 if (error) 2943 return error; 2944 2945 mutex_lock(&inode->i_mutex); 2946 /* Make sure we don't allow creating hardlink to an unlinked file */ 2947 if (inode->i_nlink == 0) 2948 error = -ENOENT; |
2949 else if (max_links && inode->i_nlink >= max_links) 2950 error = -EMLINK; |
|
2944 else 2945 error = dir->i_op->link(old_dentry, dir, new_dentry); 2946 mutex_unlock(&inode->i_mutex); 2947 if (!error) 2948 fsnotify_link(dir, inode, new_dentry); 2949 return error; 2950} 2951 --- 93 unchanged lines hidden (view full) --- 3045 * ->i_mutex on parents, which works but leads to some truly excessive 3046 * locking]. 3047 */ 3048static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry, 3049 struct inode *new_dir, struct dentry *new_dentry) 3050{ 3051 int error = 0; 3052 struct inode *target = new_dentry->d_inode; | 2951 else 2952 error = dir->i_op->link(old_dentry, dir, new_dentry); 2953 mutex_unlock(&inode->i_mutex); 2954 if (!error) 2955 fsnotify_link(dir, inode, new_dentry); 2956 return error; 2957} 2958 --- 93 unchanged lines hidden (view full) --- 3052 * ->i_mutex on parents, which works but leads to some truly excessive 3053 * locking]. 3054 */ 3055static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry, 3056 struct inode *new_dir, struct dentry *new_dentry) 3057{ 3058 int error = 0; 3059 struct inode *target = new_dentry->d_inode; |
3060 unsigned max_links = new_dir->i_sb->s_max_links; |
|
3053 3054 /* 3055 * If we are going to change the parent - check write permissions, 3056 * we'll need to flip '..'. 3057 */ 3058 if (new_dir != old_dir) { 3059 error = inode_permission(old_dentry->d_inode, MAY_WRITE); 3060 if (error) --- 7 unchanged lines hidden (view full) --- 3068 dget(new_dentry); 3069 if (target) 3070 mutex_lock(&target->i_mutex); 3071 3072 error = -EBUSY; 3073 if (d_mountpoint(old_dentry) || d_mountpoint(new_dentry)) 3074 goto out; 3075 | 3061 3062 /* 3063 * If we are going to change the parent - check write permissions, 3064 * we'll need to flip '..'. 3065 */ 3066 if (new_dir != old_dir) { 3067 error = inode_permission(old_dentry->d_inode, MAY_WRITE); 3068 if (error) --- 7 unchanged lines hidden (view full) --- 3076 dget(new_dentry); 3077 if (target) 3078 mutex_lock(&target->i_mutex); 3079 3080 error = -EBUSY; 3081 if (d_mountpoint(old_dentry) || d_mountpoint(new_dentry)) 3082 goto out; 3083 |
3084 error = -EMLINK; 3085 if (max_links && !target && new_dir != old_dir && 3086 new_dir->i_nlink >= max_links) 3087 goto out; 3088 |
|
3076 if (target) 3077 shrink_dcache_parent(new_dentry); 3078 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry); 3079 if (error) 3080 goto out; 3081 3082 if (target) { 3083 target->i_flags |= S_DEAD; --- 350 unchanged lines hidden --- | 3089 if (target) 3090 shrink_dcache_parent(new_dentry); 3091 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry); 3092 if (error) 3093 goto out; 3094 3095 if (target) { 3096 target->i_flags |= S_DEAD; --- 350 unchanged lines hidden --- |