aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dcache.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/dcache.c')
-rw-r--r--fs/dcache.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index 1536f15c4d4c..134d6775183f 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -808,10 +808,14 @@ void d_instantiate(struct dentry *entry, struct inode * inode)
808 * 808 *
809 * Fill in inode information in the entry. On success, it returns NULL. 809 * Fill in inode information in the entry. On success, it returns NULL.
810 * If an unhashed alias of "entry" already exists, then we return the 810 * If an unhashed alias of "entry" already exists, then we return the
811 * aliased dentry instead. 811 * aliased dentry instead and drop one reference to inode.
812 * 812 *
813 * Note that in order to avoid conflicts with rename() etc, the caller 813 * Note that in order to avoid conflicts with rename() etc, the caller
814 * had better be holding the parent directory semaphore. 814 * had better be holding the parent directory semaphore.
815 *
816 * This also assumes that the inode count has been incremented
817 * (or otherwise set) by the caller to indicate that it is now
818 * in use by the dcache.
815 */ 819 */
816struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode) 820struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode)
817{ 821{
@@ -838,6 +842,7 @@ struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode)
838 dget_locked(alias); 842 dget_locked(alias);
839 spin_unlock(&dcache_lock); 843 spin_unlock(&dcache_lock);
840 BUG_ON(!d_unhashed(alias)); 844 BUG_ON(!d_unhashed(alias));
845 iput(inode);
841 return alias; 846 return alias;
842 } 847 }
843 list_add(&entry->d_alias, &inode->i_dentry); 848 list_add(&entry->d_alias, &inode->i_dentry);