diff options
| author | Amar Tumballi <amar@gluster.com> | 2012-01-18 18:06:44 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2012-01-25 02:03:44 -0800 | 
| commit | cf8486cbef329ef66868f658fa35f470f97db462 (patch) | |
| tree | 18cf37bd7cf65ac820d435fb1ee43dc205a2917b /xlators/cluster/afr/src | |
| parent | b02afc6d008f9959db28244eb2b9dd3b9ef92393 (diff) | |
core: get xattrs also as part of readdirp
readdirp_req() call sends a dict_t * as an argument, which
contains all the xattr keys for which the entries got in
readdirp_rsp() are having xattr value filled dictionary.
Change-Id: I8b7e1290740ea3e884e67d19156ce849227167c0
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 765785
Reviewed-on: http://review.gluster.com/771
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
Diffstat (limited to 'xlators/cluster/afr/src')
| -rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 5 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-read.c | 17 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-read.h | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-entry.c | 4 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heald.c | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 2 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/pump.c | 13 | 
7 files changed, 25 insertions, 20 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 83b91cd3ed1..c9a8b59554a 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -957,6 +957,11 @@ afr_local_cleanup (afr_local_t *local, xlator_t *this)                  if (local->cont.opendir.checksum)                          GF_FREE (local->cont.opendir.checksum);          } + +        { /* readdirp */ +                if (local->cont.readdir.dict) +                        dict_unref (local->cont.readdir.dict); +        }  } diff --git a/xlators/cluster/afr/src/afr-dir-read.c b/xlators/cluster/afr/src/afr-dir-read.c index d41102e7eea..389515e3c36 100644 --- a/xlators/cluster/afr/src/afr-dir-read.c +++ b/xlators/cluster/afr/src/afr-dir-read.c @@ -570,7 +570,8 @@ afr_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                             children[next_call_child],                                             children[next_call_child]->fops->readdirp,                                             local->fd, -                                           local->cont.readdir.size, 0); +                                           local->cont.readdir.size, 0, +                                           local->cont.readdir.dict);                          return 0;                  }          } @@ -612,7 +613,8 @@ afr_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                                     (void *) (long) read_child,                                                     children[call_child],                                                     children[call_child]->fops->readdirp, -                                                   local->fd, local->cont.readdir.size, offset); +                                                   local->fd, local->cont.readdir.size, offset, +                                                   local->cont.readdir.dict);                                  return 0;                          }                  } else { @@ -628,7 +630,7 @@ out:  int32_t  afr_do_readdir (call_frame_t *frame, xlator_t *this, -                fd_t *fd, size_t size, off_t offset, int whichop) +                fd_t *fd, size_t size, off_t offset, int whichop, dict_t *dict)  {          afr_private_t *  priv       = NULL;          xlator_t **      children   = NULL; @@ -673,6 +675,7 @@ afr_do_readdir (call_frame_t *frame, xlator_t *this,          local->fd                  = fd_ref (fd);          local->cont.readdir.size   = size; +        local->cont.readdir.dict   = (dict)? dict_ref (dict) : NULL;          if (priv->strict_readdir) {                  ret = fd_ctx_get (fd, this, &ctx); @@ -709,7 +712,7 @@ afr_do_readdir (call_frame_t *frame, xlator_t *this,                                     (void *) (long) call_child,                                     children[call_child],                                     children[call_child]->fops->readdirp, fd, -                                   size, offset); +                                   size, offset, dict);          ret = 0;  out: @@ -723,16 +726,16 @@ int32_t  afr_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,               off_t offset)  { -        afr_do_readdir (frame, this, fd, size, offset, GF_FOP_READDIR); +        afr_do_readdir (frame, this, fd, size, offset, GF_FOP_READDIR, NULL);          return 0;  }  int32_t  afr_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, -              off_t offset) +              off_t offset, dict_t *dict)  { -        afr_do_readdir (frame, this, fd, size, offset, GF_FOP_READDIRP); +        afr_do_readdir (frame, this, fd, size, offset, GF_FOP_READDIRP, dict);          return 0;  } diff --git a/xlators/cluster/afr/src/afr-dir-read.h b/xlators/cluster/afr/src/afr-dir-read.h index 6a6bc635414..7e50a1c8cc8 100644 --- a/xlators/cluster/afr/src/afr-dir-read.h +++ b/xlators/cluster/afr/src/afr-dir-read.h @@ -35,7 +35,7 @@ afr_readdir (call_frame_t *frame, xlator_t *this,  int32_t  afr_readdirp (call_frame_t *frame, xlator_t *this, -	     fd_t *fd, size_t size, off_t offset); +              fd_t *fd, size_t size, off_t offset, dict_t *dict);  int32_t  afr_checksum (call_frame_t *frame, xlator_t *this, diff --git a/xlators/cluster/afr/src/afr-self-heal-entry.c b/xlators/cluster/afr/src/afr-self-heal-entry.c index ba29656e2cd..ed1c51a2172 100644 --- a/xlators/cluster/afr/src/afr-self-heal-entry.c +++ b/xlators/cluster/afr/src/afr-self-heal-entry.c @@ -832,7 +832,7 @@ afr_sh_entry_expunge_subvol (call_frame_t *frame, xlator_t *this,          STACK_WIND (frame, afr_sh_entry_expunge_readdir_cbk,                      priv->children[active_src],                      priv->children[active_src]->fops->readdirp, -                    sh->healing_fd, sh->block_size, sh->offset); +                    sh->healing_fd, sh->block_size, sh->offset, NULL);          return 0;  } @@ -1889,7 +1889,7 @@ afr_sh_entry_impunge_subvol (call_frame_t *frame, xlator_t *this,          STACK_WIND (frame, afr_sh_entry_impunge_readdir_cbk,                      priv->children[active_src],                      priv->children[active_src]->fops->readdirp, -                    sh->healing_fd, sh->block_size, sh->offset); +                    sh->healing_fd, sh->block_size, sh->offset, 0);          return 0;  } diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c index f360ec33df8..186d7dd26a5 100644 --- a/xlators/cluster/afr/src/afr-self-heald.c +++ b/xlators/cluster/afr/src/afr-self-heald.c @@ -177,7 +177,7 @@ _crawl_directory (loc_t *loc, pid_t pid)                  goto out;          } -        while (syncop_readdirp (this, fd, 131072, offset, &entries)) { +        while (syncop_readdirp (this, fd, 131072, offset, NULL, &entries)) {                  ret = 0;                  free_entries = _gf_true;                  if (afr_up_children_count (priv->child_up, diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 0ff3000857c..889828a6fa6 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -495,7 +495,7 @@ typedef struct _afr_local {                          int32_t op_errno;                          size_t size;                          off_t offset; - +                        dict_t *dict;                          gf_boolean_t failed;                          int last_index;                  } readdir; diff --git a/xlators/cluster/afr/src/pump.c b/xlators/cluster/afr/src/pump.c index 73389009d68..357aa9f295f 100644 --- a/xlators/cluster/afr/src/pump.c +++ b/xlators/cluster/afr/src/pump.c @@ -362,7 +362,7 @@ gf_pump_traverse_directory (loc_t *loc)                  "pump opendir on %s returned=%d",                  loc->path, ret); -        while (syncop_readdirp (this, fd, 131072, offset, &entries)) { +        while (syncop_readdirp (this, fd, 131072, offset, NULL, &entries)) {                  free_entries = _gf_true;                  if (list_empty (&entries.list)) { @@ -2195,11 +2195,8 @@ pump_readdir (call_frame_t *frame,  static int32_t -pump_readdirp (call_frame_t *frame, -               xlator_t *this, -               fd_t *fd, -               size_t size, -               off_t off) +pump_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, +               size_t size, off_t off, dict_t *dict)  {          afr_private_t *priv  = NULL;  	priv = this->private; @@ -2208,10 +2205,10 @@ pump_readdirp (call_frame_t *frame,                              default_readdirp_cbk,                              FIRST_CHILD(this),                              FIRST_CHILD(this)->fops->readdirp, -                            fd, size, off); +                            fd, size, off, dict);                  return 0;          } -        afr_readdirp (frame, this, fd, size, off); +        afr_readdirp (frame, this, fd, size, off, dict);          return 0;  }  | 
