diff options
author | Ingo Molnar <mingo@kernel.org> | 2014-02-27 12:41:17 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-02-27 12:41:17 +0100 |
commit | ff5a7088f0f04dd246e514f898cab0c863c3598d (patch) | |
tree | 68a8f588e60fba05ee54b74b32a3269a72d130b9 /fs/ocfs2/namei.c | |
parent | 7e74efcf76c16f851df5c838c143c4a1865ea9fa (diff) | |
parent | e3703f8cdfcf39c25c4338c3ad8e68891cca3731 (diff) | |
download | talos-op-linux-ff5a7088f0f04dd246e514f898cab0c863c3598d.tar.gz talos-op-linux-ff5a7088f0f04dd246e514f898cab0c863c3598d.zip |
Merge branch 'perf/urgent' into perf/core
Merge the latest fixes before queueing up new changes.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/ocfs2/namei.c')
-rw-r--r-- | fs/ocfs2/namei.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index f4d609be9400..3683643f3f0e 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c @@ -664,6 +664,7 @@ static int ocfs2_link(struct dentry *old_dentry, struct ocfs2_super *osb = OCFS2_SB(dir->i_sb); struct ocfs2_dir_lookup_result lookup = { NULL, }; sigset_t oldset; + u64 old_de_ino; trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno, old_dentry->d_name.len, old_dentry->d_name.name, @@ -686,6 +687,22 @@ static int ocfs2_link(struct dentry *old_dentry, goto out; } + err = ocfs2_lookup_ino_from_name(dir, old_dentry->d_name.name, + old_dentry->d_name.len, &old_de_ino); + if (err) { + err = -ENOENT; + goto out; + } + + /* + * Check whether another node removed the source inode while we + * were in the vfs. + */ + if (old_de_ino != OCFS2_I(inode)->ip_blkno) { + err = -ENOENT; + goto out; + } + err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name, dentry->d_name.len); if (err) |