diff options
author | M. Mohan Kumar <mohan@in.ibm.com> | 2013-11-15 14:19:11 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-11-20 14:46:16 -0800 |
commit | 2bb025699a8b9b34491c8b13a2bbb6da302a5d77 (patch) | |
tree | bcfca804f97dbbd960c0b74b499926b717e51e07 /xlators/storage/bd/src/bd.c | |
parent | 5e31894fbda74a524e1fe30d26f7ed82a77eb5ff (diff) |
bd: Add Zerofill FOP support
BUG: 1028673
Change-Id: I9ba8e3e6cf2f888640b4d2a2eb934a27ff903c42
Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
Reviewed-on: http://review.gluster.org/6290
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/storage/bd/src/bd.c')
-rw-r--r-- | xlators/storage/bd/src/bd.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/xlators/storage/bd/src/bd.c b/xlators/storage/bd/src/bd.c index 1eb5cd158..17a9a5f15 100644 --- a/xlators/storage/bd/src/bd.c +++ b/xlators/storage/bd/src/bd.c @@ -2195,6 +2195,36 @@ out: return 0; } +static int +bd_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, + off_t len, dict_t *xdata) +{ + int32_t ret = 0; + struct iatt statpre = {0,}; + struct iatt statpost = {0,}; + bd_attr_t *bdatt = NULL; + + /* iatt already cached */ + if (bd_inode_ctx_get (fd->inode, this, &bdatt) < 0) { + STACK_WIND (frame, default_zerofill_cbk, FIRST_CHILD (this), + FIRST_CHILD (this)->fops->zerofill, + fd, offset, len, xdata); + return 0; + } + + ret = bd_do_zerofill(frame, this, fd, offset, len, + &statpre, &statpost); + if (ret) + goto err; + + STACK_UNWIND_STRICT(zerofill, frame, 0, 0, &statpre, &statpost, NULL); + return 0; + +err: + STACK_UNWIND_STRICT(zerofill, frame, -1, ret, NULL, NULL, NULL); + return 0; +} + /** * notify - when parent sends PARENT_UP, send CHILD_UP event from here */ @@ -2324,7 +2354,8 @@ init (xlator_t *this) } } - _private->caps |= BD_CAPS_OFFLOAD_COPY | BD_CAPS_OFFLOAD_SNAPSHOT; + _private->caps |= BD_CAPS_OFFLOAD_COPY | BD_CAPS_OFFLOAD_SNAPSHOT | + BD_CAPS_OFFLOAD_ZERO; return 0; error: @@ -2384,6 +2415,7 @@ struct xlator_fops fops = { .flush = bd_flush, .setattr = bd_setattr, .discard = bd_discard, + .zerofill = bd_zerofill, }; struct xlator_cbks cbks = { |