diff options
| author | vmallika <vmallika@redhat.com> | 2015-01-30 11:49:25 +0530 | 
|---|---|---|
| committer | Raghavendra Bhat <raghavendra@redhat.com> | 2015-02-03 05:19:40 -0800 | 
| commit | 90f35bc8e806fc615d5e2a2657a389dbdd7e2672 (patch) | |
| tree | 562c0cacc80eabc882d6f570939520b7e8c87feb | |
| parent | 1a65f14feaa83f82043bf460b10550717e1adac2 (diff) | |
features/marker: do not call inode_path on the inode not yet linked
This is a backport of http://review.gluster.org/#/c/9320
> * in readdirp callbak marker is calling inode_path on the inodes that
>   are not yet linked to the inode table.
>
> Change-Id: I7f5db29c6a7e778272044f60f8e73c60574df3a9
> BUG: 1176393
> Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
> Reviewed-on: http://review.gluster.org/9320
> Tested-by: Gluster Build System <jenkins@build.gluster.com>
> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
> Tested-by: Raghavendra G <rgowdapp@redhat.com>
Change-Id: Ibcfabe479ae6fd07a94ce80532fe1971d242974d
BUG: 1174170
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/9509
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
| -rw-r--r-- | xlators/features/marker/src/marker.c | 36 | 
1 files changed, 24 insertions, 12 deletions
diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index df4143545ee..d612d60a239 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -2767,11 +2767,12 @@ marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                       int op_ret, int op_errno, gf_dirent_t *entries,                       dict_t *xdata)  { -        gf_dirent_t    *entry = NULL; -        marker_conf_t  *priv  = NULL; -        marker_local_t *local = NULL; -        loc_t           loc   = {0, }; -        int             ret   = -1; +        gf_dirent_t    *entry        = NULL; +        marker_conf_t  *priv         = NULL; +        marker_local_t *local        = NULL; +        loc_t           loc          = {0, }; +        int             ret          = -1; +        char           *resolvedpath = NULL;          if (op_ret <= 0)                  goto unwind; @@ -2788,19 +2789,30 @@ marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                      (strcmp (entry->d_name, "..") == 0))                          continue; -                ret = marker_inode_loc_fill (entry->inode, -                                             entry->d_name, &loc); -                if (ret) { -                        gf_log (this->name, GF_LOG_WARNING, "Couln't build " -                                "loc for %s/%s", -                                uuid_utoa (local->loc.inode->gfid), -                                entry->d_name); +                loc.parent = inode_ref (local->loc.inode); +                loc.inode = inode_ref (entry->inode); +                ret = inode_path (loc.parent, entry->d_name, &resolvedpath); +                if (ret < 0) { +                        gf_log (this->name, GF_LOG_ERROR, "failed to get the " +                                "path for the entry %s", entry->d_name); +                        loc_wipe (&loc); +                        continue; +                } + +                loc.path = gf_strdup (resolvedpath); +                if (!loc.path) { +                        gf_log (this->name, GF_LOG_ERROR, "strdup of path " +                                "failed for the entry %s (path: %s)", +                                entry->d_name, resolvedpath); +                        loc_wipe (&loc);                          continue;                  }                  mq_xattr_state (this, &loc, entry->dict, entry->d_stat);                  loc_wipe (&loc); +                GF_FREE (resolvedpath); +                resolvedpath = NULL;          }  unwind:  | 
