diff options
| author | Krishna Srinivas <ksriniva@redhat.com> | 2012-04-30 16:43:16 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-05-05 12:42:31 -0700 | 
| commit | 9bd1b291e3e107250b38d05702df7cd751382bdc (patch) | |
| tree | ad1a4e0810d7063112c09782c5665fde7e375cc2 | |
| parent | 298ff93eab48de51a1bd77e4b12e88a7add1d174 (diff) | |
libglusterfs/inode.c: do not link the inode in the dentry cache for "." and ".."
Change-Id: I18c2e090c1ca64f47ce70dc63c9f73ea7def2f86
BUG: 810828
Signed-off-by: Krishna Srinivas <ksriniva@redhat.com>
Reviewed-on: http://review.gluster.com/3220
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
| -rw-r--r-- | libglusterfs/src/inode.c | 5 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nfs3.c | 8 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server3_1-fops.c | 6 | 
3 files changed, 11 insertions, 8 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index fed23ae35..1db829792 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -851,6 +851,11 @@ __inode_link (inode_t *inode, inode_t *parent, const char *name,                  }          } +        if (name) { +                if (!strcmp(name, ".") || !strcmp(name, "..")) +                        return link_inode; +        } +          /* use only link_inode beyond this point */          if (parent) {                  old_dentry = __dentry_grep (table, parent, name); diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c index a155b4e8a..f950b9273 100644 --- a/xlators/nfs/server/src/nfs3.c +++ b/xlators/nfs/server/src/nfs3.c @@ -1410,12 +1410,8 @@ nfs3_lookup (rpcsvc_request_t *req, struct nfs3_fh *fh, int fhlen, char *name)          nfs3_handle_call_state_init (nfs3, cs, req, vol, stat, nfs3err);          cs->lookuptype = GF_NFS3_REVALIDATE; -        if (!nfs3_is_parentdir_entry (name)) -                ret = nfs3_fh_resolve_and_resume (cs, fh, name, -                                                  nfs3_lookup_resume); -        else -                ret = nfs3_fh_resolve_and_resume (cs, fh, NULL, -                                                  nfs3_lookup_parentdir_resume); +        ret = nfs3_fh_resolve_and_resume (cs, fh, name, +                                          nfs3_lookup_resume);          if (ret < 0) {                  gf_log (GF_NFS, GF_LOG_ERROR, "failed to start hard reslove"); diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c index 0e252b5c3..10dddd79b 100644 --- a/xlators/protocol/server/src/server3_1-fops.c +++ b/xlators/protocol/server/src/server3_1-fops.c @@ -120,8 +120,10 @@ server_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  if (!__is_root_gfid (inode->gfid)) {                          link_inode = inode_link (inode, state->loc.parent,                                                   state->loc.name, stbuf); -                        inode_lookup (link_inode); -                        inode_unref (link_inode); +                        if (link_inode) { +                                inode_lookup (link_inode); +                                inode_unref (link_inode); +                        }                  }          } else {                  if (state->is_revalidate && op_errno == ENOENT) {  | 
