diff options
author | N Balachandran <nbalacha@redhat.com> | 2019-09-25 19:50:27 +0530 |
---|---|---|
committer | hari gowtham <hari.gowtham005@gmail.com> | 2019-10-04 05:22:36 +0000 |
commit | 27b95724fa27c09d851d1f4faf93a27948d99121 (patch) | |
tree | a158a432391267fd69ada011189108e46dd1f410 /xlators/performance/write-behind/src/write-behind.c | |
parent | a2b3ce5b3ef846971453644820d80101d1ebec9d (diff) |
perf/write-behind: Clear frame->local on conflict error
WB saves the wb_inode in frame->local for the truncate and
ftruncate fops. This value is not cleared in case of error
on a conflicting write request. FRAME_DESTROY finds a non-null
frame->local and tries to free it using mem_put. However,
wb_inode is allocated using GF_CALLOC, causing the
process to crash.
credit: vpolakis@gmail.com
Change-Id: I217f61470445775e05145aebe44c814731c1b8c5
fixes: bz#1755679
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators/performance/write-behind/src/write-behind.c')
-rw-r--r-- | xlators/performance/write-behind/src/write-behind.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c index cf302bdccc1..1b8896864c4 100644 --- a/xlators/performance/write-behind/src/write-behind.c +++ b/xlators/performance/write-behind/src/write-behind.c @@ -1523,6 +1523,10 @@ __wb_handle_failed_conflict(wb_request_t *req, wb_request_t *conflict, */ req->op_ret = -1; req->op_errno = conflict->op_errno; + if ((req->stub->fop == GF_FOP_TRUNCATE) || + (req->stub->fop == GF_FOP_FTRUNCATE)) { + req->stub->frame->local = NULL; + } list_del_init(&req->todo); list_add_tail(&req->winds, tasks); |