===== git log ====
commit 735237b0ee3508ceb7ec288fb46c7e1a93492132
Author: hari gowtham <hgowtham@redhat.com>
Date:   Wed Jun 5 21:56:22 2019 +0530

    doc: Added release notes for 4.1.9
    
    Fixes: bz#1693693
    
    Change-Id: I3e2490962d0cd64210a2cf9f1cb3d909d8ac270b
    Signed-off-by: hari gowtham <hgowtham@redhat.com>

commit dc7f464d019ebe980232263cad8528456253e9dd
Author: Raghavendra G <rgowdapp@redhat.com>
Date:   Tue May 7 10:35:06 2019 +0530

    performance/write-behind: remove request from wip list in wb_writev_cbk
    
    There is a race in the way O_DIRECT writes are handled. Assume two
    overlapping write requests w1 and w2.
    
    * w1 is issued and is in wb_inode->wip queue as the response is still
      pending from bricks. Also wb_request_unref in wb_do_winds is not yet
      invoked.
    
           list_for_each_entry_safe (req, tmp, tasks, winds) {
    		list_del_init (&req->winds);
    
                    if (req->op_ret == -1) {
    			call_unwind_error_keep_stub (req->stub, req->op_ret,
    		                                     req->op_errno);
                    } else {
                            call_resume_keep_stub (req->stub);
    		}
    
                    wb_request_unref (req);
            }
    
    * w2 is issued and wb_process_queue is invoked. w2 is not picked up
      for winding as w1 is still in wb_inode->wip. w1 is added to todo
      list and wb_writev for w2 returns.
    
    * response to w1 is received and invokes wb_request_unref. Assume
      wb_request_unref in wb_do_winds (see point 1) is not invoked
      yet. Since there is one more refcount, wb_request_unref in
      wb_writev_cbk of w1 doesn't remove w1 from wip.
    
    * wb_process_queue is invoked as part of wb_writev_cbk of w1. But, it
      fails to wind w2 as w1 is still in wip.
    

More commit messages for this ChangeLog can be found at
https://forge.gluster.org/glusterfs-core/glusterfs/commits/v4.1.9
