From: NeilBrown <[email protected]> Proposed locking changes will mean that calling d_drop() could effectively unlock the name allowing a parallel lookup to proceed. For this reason it could only be called *after* the attempt to create a symlink (in this case) has completed (whether successfully or not).
So move the d_drop() to after the venus_symlink() call. Signed-off-by: NeilBrown <[email protected]> --- fs/coda/dir.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/coda/dir.c b/fs/coda/dir.c index c64b8cd81568..70eb6042fdaa 100644 --- a/fs/coda/dir.c +++ b/fs/coda/dir.c @@ -244,13 +244,13 @@ static int coda_symlink(struct mnt_idmap *idmap, if (symlen > CODA_MAXPATHLEN) return -ENAMETOOLONG; + error = venus_symlink(dir_inode->i_sb, coda_i2f(dir_inode), name, len, + symname, symlen); /* - * This entry is now negative. Since we do not create + * This entry is still negative. Since we did not create * an inode for the entry we have to drop it. */ d_drop(de); - error = venus_symlink(dir_inode->i_sb, coda_i2f(dir_inode), name, len, - symname, symlen); /* mtime is no good anymore */ if (!error) -- 2.50.0.107.gf914562f5916.dirty
