diff options
| author | Mohammed Rafi KC <rkavunga@redhat.com> | 2016-01-12 12:04:59 +0530 | 
|---|---|---|
| committer | Dan Lambright <dlambrig@redhat.com> | 2016-01-13 17:35:12 -0800 | 
| commit | 14f925f5262ecabb2faf8142267c37103413e189 (patch) | |
| tree | a39735f59539b3208718c3a61bcbc49a5cf83afc /xlators/nfs/server/src/nfs3-helpers.c | |
| parent | 3882408103973eac6983c2efdd5af8b1d51f272c (diff) | |
nfs: send lookup if inode_ctx is not set
During resolving of an entry or inode, if inode ctx
was not set, we will send a lookup.
This patch also make sure that inode_ctx will be created
after every inode_link.
Change-Id: I137a7e2510635ff4ea6d007b671961341f89c949
BUG: 1297311
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
Reviewed-on: http://review.gluster.org/13224
Reviewed-by: soumya k <skoduri@redhat.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Dan Lambright <dlambrig@redhat.com>
Tested-by: Dan Lambright <dlambrig@redhat.com>
Diffstat (limited to 'xlators/nfs/server/src/nfs3-helpers.c')
| -rw-r--r-- | xlators/nfs/server/src/nfs3-helpers.c | 9 | 
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 2203f1e1a90..cfa1ac64397 100644 --- a/xlators/nfs/server/src/nfs3-helpers.c +++ b/xlators/nfs/server/src/nfs3-helpers.c @@ -3655,6 +3655,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; @@ -3697,6 +3698,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; @@ -3766,7 +3768,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); @@ -3807,14 +3809,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);  | 
