diff options
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index e7a1a99b7464..46fc78206782 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -1174,6 +1174,41 @@ struct dentry * d_alloc_anon(struct inode *inode) | |||
1174 | return res; | 1174 | return res; |
1175 | } | 1175 | } |
1176 | 1176 | ||
1177 | /** | ||
1178 | * d_obtain_alias - find or allocate a dentry for a given inode | ||
1179 | * @inode: inode to allocate the dentry for | ||
1180 | * | ||
1181 | * Obtain a dentry for an inode resulting from NFS filehandle conversion or | ||
1182 | * similar open by handle operations. The returned dentry may be anonymous, | ||
1183 | * or may have a full name (if the inode was already in the cache). | ||
1184 | * | ||
1185 | * When called on a directory inode, we must ensure that the inode only ever | ||
1186 | * has one dentry. If a dentry is found, that is returned instead of | ||
1187 | * allocating a new one. | ||
1188 | * | ||
1189 | * On successful return, the reference to the inode has been transferred | ||
1190 | * to the dentry. If %NULL is returned (indicating kmalloc failure), | ||
1191 | * the reference on the inode has been released. To make it easier | ||
1192 | * to use in export operations a NULL or IS_ERR inode may be passed in | ||
1193 | * and will be casted to the corresponding NULL or IS_ERR dentry. | ||
1194 | */ | ||
1195 | struct dentry *d_obtain_alias(struct inode *inode) | ||
1196 | { | ||
1197 | struct dentry *dentry; | ||
1198 | |||
1199 | if (!inode) | ||
1200 | return NULL; | ||
1201 | if (IS_ERR(inode)) | ||
1202 | return ERR_CAST(inode); | ||
1203 | |||
1204 | dentry = d_alloc_anon(inode); | ||
1205 | if (!dentry) { | ||
1206 | iput(inode); | ||
1207 | dentry = ERR_PTR(-ENOMEM); | ||
1208 | } | ||
1209 | return dentry; | ||
1210 | } | ||
1211 | EXPORT_SYMBOL_GPL(d_obtain_alias); | ||
1177 | 1212 | ||
1178 | /** | 1213 | /** |
1179 | * d_splice_alias - splice a disconnected dentry into the tree if one exists | 1214 | * d_splice_alias - splice a disconnected dentry into the tree if one exists |