summaryrefslogtreecommitdiffstats
path: root/xlators/nfs/server/src/nfs3-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/nfs/server/src/nfs3-helpers.c')
-rw-r--r--xlators/nfs/server/src/nfs3-helpers.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/xlators/nfs/server/src/nfs3-helpers.c b/xlators/nfs/server/src/nfs3-helpers.c
index 985d08b01eb..ed673a12489 100644
--- a/xlators/nfs/server/src/nfs3-helpers.c
+++ b/xlators/nfs/server/src/nfs3-helpers.c
@@ -3660,6 +3660,7 @@ nfs3_fh_resolve_entry_lookup_cbk (call_frame_t *frame, void *cookie,
linked_inode = inode_link (inode, cs->resolvedloc.parent,
cs->resolvedloc.name, buf);
if (linked_inode) {
+ nfs_fix_generation (this, linked_inode);
inode_lookup (linked_inode);
inode_unref (cs->resolvedloc.inode);
cs->resolvedloc.inode = linked_inode;
@@ -3702,6 +3703,7 @@ nfs3_fh_resolve_inode_lookup_cbk (call_frame_t *frame, void *cookie,
linked_inode = inode_link (inode, cs->resolvedloc.parent,
cs->resolvedloc.name, buf);
if (linked_inode) {
+ nfs_fix_generation (this, linked_inode);
inode_lookup (linked_inode);
inode_unref (cs->resolvedloc.inode);
cs->resolvedloc.inode = linked_inode;
@@ -3771,7 +3773,7 @@ nfs3_fh_resolve_entry_hard (nfs3_call_state_t *cs)
", entry: %s", uuid_utoa (cs->resolvefh.gfid),
cs->resolventry);
- ret = nfs_entry_loc_fill (cs->vol->itable, cs->resolvefh.gfid,
+ ret = nfs_entry_loc_fill (cs->nfsx, cs->vol->itable, cs->resolvefh.gfid,
cs->resolventry, &cs->resolvedloc,
NFS_RESOLVE_CREATE);
@@ -3812,14 +3814,17 @@ nfs3_fh_resolve_inode (nfs3_call_state_t *cs)
{
inode_t *inode = NULL;
int ret = -EFAULT;
+ xlator_t *this = NULL;
if (!cs)
return ret;
+ this = cs->nfsx;
gf_msg_trace (GF_NFS3, 0, "FH needs inode resolution");
gf_uuid_copy (cs->resolvedloc.gfid, cs->resolvefh.gfid);
+
inode = inode_find (cs->vol->itable, cs->resolvefh.gfid);
- if (!inode)
+ if (!inode || inode_ctx_get (inode, this, NULL))
ret = nfs3_fh_resolve_inode_hard (cs);
else
ret = nfs3_fh_resolve_inode_done (cs, inode);