diff options
Diffstat (limited to 'xlators/performance/md-cache/src')
| -rw-r--r-- | xlators/performance/md-cache/src/md-cache.c | 41 | 
1 files changed, 41 insertions, 0 deletions
diff --git a/xlators/performance/md-cache/src/md-cache.c b/xlators/performance/md-cache/src/md-cache.c index 36d81887c7b..3a5b7a5d1ae 100644 --- a/xlators/performance/md-cache/src/md-cache.c +++ b/xlators/performance/md-cache/src/md-cache.c @@ -2098,6 +2098,46 @@ int mdc_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,  }  int +mdc_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                int32_t op_ret, int32_t op_errno, +                struct iatt *prebuf, struct iatt *postbuf, dict_t *xdata) +{ +        mdc_local_t  *local = NULL; + +        local = frame->local; + +        if (op_ret != 0) +                goto out; + +        if (!local) +                goto out; + +        mdc_inode_iatt_set_validate(this, local->fd->inode, prebuf, postbuf); + +out: +        MDC_STACK_UNWIND(zerofill, frame, op_ret, op_errno, prebuf, postbuf, +                         xdata); + +        return 0; +} + +int mdc_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, +                size_t len, dict_t *xdata) +{ +        mdc_local_t *local; + +        local = mdc_local_get(frame); +        local->fd = fd_ref(fd); + +        STACK_WIND(frame, mdc_zerofill_cbk, FIRST_CHILD(this), +                   FIRST_CHILD(this)->fops->zerofill, fd, offset, len, +                   xdata); + +        return 0; +} + + +int  mdc_forget (xlator_t *this, inode_t *inode)  {          mdc_inode_wipe (this, inode); @@ -2229,6 +2269,7 @@ struct xlator_fops fops = {  	.readdir     = mdc_readdir,  	.fallocate   = mdc_fallocate,  	.discard     = mdc_discard, +        .zerofill    = mdc_zerofill,  };  | 
