]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/exportfs/expfs.c
exportfs: be careful to only return expected errors.
[karo-tx-linux.git] / fs / exportfs / expfs.c
index 207ba8d627ca74feca42b4196df15ca0a9a621e6..a4b531be9168d576e7e5f875bf5af6dc9a01020c 100644 (file)
@@ -428,10 +428,10 @@ struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
        if (!nop || !nop->fh_to_dentry)
                return ERR_PTR(-ESTALE);
        result = nop->fh_to_dentry(mnt->mnt_sb, fid, fh_len, fileid_type);
-       if (!result)
-               result = ERR_PTR(-ESTALE);
-       if (IS_ERR(result))
-               return result;
+       if (PTR_ERR(result) == -ENOMEM)
+               return ERR_CAST(result);
+       if (IS_ERR_OR_NULL(result))
+               return ERR_PTR(-ESTALE);
 
        if (d_is_dir(result)) {
                /*
@@ -541,6 +541,8 @@ struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
 
  err_result:
        dput(result);
+       if (err != -ENOMEM)
+               err = -ESTALE;
        return ERR_PTR(err);
 }
 EXPORT_SYMBOL_GPL(exportfs_decode_fh);