|
@@ -2524,19 +2524,19 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de
|
|
|
return -EPERM;
|
|
|
if (!dir->i_op || !dir->i_op->link)
|
|
|
return -EPERM;
|
|
|
- if (S_ISDIR(old_dentry->d_inode->i_mode))
|
|
|
+ if (S_ISDIR(inode->i_mode))
|
|
|
return -EPERM;
|
|
|
|
|
|
error = security_inode_link(old_dentry, dir, new_dentry);
|
|
|
if (error)
|
|
|
return error;
|
|
|
|
|
|
- mutex_lock(&old_dentry->d_inode->i_mutex);
|
|
|
+ mutex_lock(&inode->i_mutex);
|
|
|
DQUOT_INIT(dir);
|
|
|
error = dir->i_op->link(old_dentry, dir, new_dentry);
|
|
|
- mutex_unlock(&old_dentry->d_inode->i_mutex);
|
|
|
+ mutex_unlock(&inode->i_mutex);
|
|
|
if (!error)
|
|
|
- fsnotify_link(dir, old_dentry->d_inode, new_dentry);
|
|
|
+ fsnotify_link(dir, inode, new_dentry);
|
|
|
return error;
|
|
|
}
|
|
|
|