diff options
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 7 |
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 | */ |
816 | struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode) | 820 | struct 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); |