diff options
Diffstat (limited to 'xlators/features/marker/src')
| -rw-r--r-- | xlators/features/marker/src/marker-quota.c | 4 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker.c | 44 | 
2 files changed, 46 insertions, 2 deletions
diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 227c4951b35..6f324aca361 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -2129,9 +2129,11 @@ mq_req_xattr (xlator_t *this,          int32_t               ret       = -1;          GF_VALIDATE_OR_GOTO ("marker", this, out); -        GF_VALIDATE_OR_GOTO ("marker", loc, out);          GF_VALIDATE_OR_GOTO ("marker", dict, out); +        if (!loc) +                goto set_size; +          //if not "/" then request contribution          if (strcmp (loc->path, "/") == 0)                  goto set_size; diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 93b1518cb7e..291e24bdc6b 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -2188,6 +2188,47 @@ err:          return 0;  } +int +marker_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                     int op_ret, int op_errno, gf_dirent_t *entries) +{ +        gf_dirent_t *entry = NULL; + +        if (op_ret <= 0) +                goto unwind; + +        list_for_each_entry (entry, &entries->list, list) { +                /* TODO: fill things */ +        } + +unwind: +        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, entries); + +        return 0; +} +int +marker_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, +                 off_t offset, dict_t *dict) +{ +        marker_conf_t  *priv    = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind; + +        if ((priv->feature_enabled & GF_QUOTA) && dict) +                mq_req_xattr (this, NULL, dict); + +wind: +        STACK_WIND (frame, marker_readdirp_cbk, +                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->readdirp, +                    fd, size, offset, dict); + +        return 0; +} + +  int32_t  mem_acct_init (xlator_t *this)  { @@ -2479,7 +2520,8 @@ struct xlator_fops fops = {          .setattr     = marker_setattr,          .fsetattr    = marker_fsetattr,          .removexattr = marker_removexattr, -        .getxattr    = marker_getxattr +        .getxattr    = marker_getxattr, +        .readdirp    = marker_readdirp,  };  struct xlator_cbks cbks = {  | 
