|
@@ -681,33 +681,24 @@ static struct dentry *fat_fh_to_dentry(struct super_block *sb,
|
|
|
inode = NULL;
|
|
|
}
|
|
|
}
|
|
|
- if (!inode) {
|
|
|
- /* For now, do nothing
|
|
|
- * What we could do is:
|
|
|
- * follow the file starting at fh[4], and record
|
|
|
- * the ".." entry, and the name of the fh[2] entry.
|
|
|
- * The follow the ".." file finding the next step up.
|
|
|
- * This way we build a path to the root of
|
|
|
- * the tree. If this works, we lookup the path and so
|
|
|
- * get this inode into the cache.
|
|
|
- * Finally try the fat_iget lookup again
|
|
|
- * If that fails, then weare totally out of luck
|
|
|
- * But all that is for another day
|
|
|
- */
|
|
|
- }
|
|
|
- if (!inode)
|
|
|
- return ERR_PTR(-ESTALE);
|
|
|
-
|
|
|
|
|
|
- /* now to find a dentry.
|
|
|
- * If possible, get a well-connected one
|
|
|
+ /*
|
|
|
+ * For now, do nothing if the inode is not found.
|
|
|
+ *
|
|
|
+ * What we could do is:
|
|
|
+ *
|
|
|
+ * - follow the file starting at fh[4], and record the ".." entry,
|
|
|
+ * and the name of the fh[2] entry.
|
|
|
+ * - then follow the ".." file finding the next step up.
|
|
|
+ *
|
|
|
+ * This way we build a path to the root of the tree. If this works, we
|
|
|
+ * lookup the path and so get this inode into the cache. Finally try
|
|
|
+ * the fat_iget lookup again. If that fails, then we are totally out
|
|
|
+ * of luck. But all that is for another day
|
|
|
*/
|
|
|
- result = d_alloc_anon(inode);
|
|
|
- if (result == NULL) {
|
|
|
- iput(inode);
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
- }
|
|
|
- result->d_op = sb->s_root->d_op;
|
|
|
+ result = d_obtain_alias(inode);
|
|
|
+ if (!IS_ERR(result))
|
|
|
+ result->d_op = sb->s_root->d_op;
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -754,15 +745,8 @@ static struct dentry *fat_get_parent(struct dentry *child)
|
|
|
}
|
|
|
inode = fat_build_inode(sb, de, i_pos);
|
|
|
brelse(bh);
|
|
|
- if (IS_ERR(inode)) {
|
|
|
- parent = ERR_CAST(inode);
|
|
|
- goto out;
|
|
|
- }
|
|
|
- parent = d_alloc_anon(inode);
|
|
|
- if (!parent) {
|
|
|
- iput(inode);
|
|
|
- parent = ERR_PTR(-ENOMEM);
|
|
|
- }
|
|
|
+
|
|
|
+ parent = d_obtain_alias(inode);
|
|
|
out:
|
|
|
unlock_super(sb);
|
|
|
|