diff options
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 5 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-inode-read.c | 41 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht.c | 1 | 
3 files changed, 47 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index 7cc549e133c..ad868939523 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.h @@ -941,6 +941,11 @@ int32_t dht_lk (call_frame_t        *frame,                  int32_t          cmd,                  struct gf_flock *flock, dict_t *xdata); +int32_t dht_lease (call_frame_t    *frame, +                   xlator_t        *this, +                   loc_t           *loc, +                   struct gf_lease *lease, dict_t *xdata); +  int32_t dht_inodelk (call_frame_t *frame, xlator_t *this,                       const char      *volume, loc_t *loc, int32_t cmd,                       struct gf_flock *flock, dict_t *xdata); diff --git a/xlators/cluster/dht/src/dht-inode-read.c b/xlators/cluster/dht/src/dht-inode-read.c index d40ac7d4c61..72c81c400af 100644 --- a/xlators/cluster/dht/src/dht-inode-read.c +++ b/xlators/cluster/dht/src/dht-inode-read.c @@ -981,6 +981,47 @@ err:          return 0;  } +int +dht_lease_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +               int op_ret, int op_errno, struct gf_lease *lease, dict_t *xdata) +{ +        DHT_STACK_UNWIND (lease, frame, op_ret, op_errno, lease, xdata); + +        return 0; +} + +int +dht_lease (call_frame_t *frame, xlator_t *this, +           loc_t *loc, struct gf_lease *lease, dict_t *xdata) +{ +        xlator_t     *subvol = NULL; +        int           op_errno = -1; + +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); + +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_msg_debug (this->name, 0, +                              "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        /* TODO: for rebalance, we need to preserve the fop arguments */ +        STACK_WIND (frame, dht_lease_cbk, subvol, subvol->fops->lease, +                    loc, lease, xdata); + +        return 0; + +err: +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (lease, frame, -1, op_errno, NULL, NULL); + +        return 0; +} +  /* Symlinks are currently not migrated, so no need for any check here */  int  dht_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index aa3080c420d..afdfd5c80ea 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -52,6 +52,7 @@ struct xlator_fops fops = {          .inodelk     = dht_inodelk,          .finodelk    = dht_finodelk,          .lk          = dht_lk, +        .lease       = dht_lease,          /* Inode write operations */          .fremovexattr = dht_fremovexattr,  | 
