• David Jeffery's avatar
    md: improve handling of bio with REQ_PREFLUSH in md_flush_request() · 775d7831
    David Jeffery authored
    If pers->make_request fails in md_flush_request(), the bio is lost. To
    fix this, pass back a bool to indicate if the original make_request call
    should continue to handle the I/O and instead of assuming the flush logic
    will push it to completion.
    
    Convert md_flush_request to return a bool and no longer calls the raid
    driver's make_request function.  If the return is true, then the md flush
    logic has or will complete the bio and the md make_request call is done.
    If false, then the md make_request function needs to keep processing like
    it is a normal bio. Let the original call to md_handle_request handle any
    need to retry sending the bio to the raid driver's make_request function
    should it be needed.
    
    Also mark md_flush_request and the make_request function pointer as
    __must_check to issue warnings should these critical return values be
    ignored.
    
    Fixes: 2bc13b83 ("md: batch flush requests.")
    Cc: stable@vger.kernel.org # # v4.19+
    Cc: NeilBrown <neilb@suse.com>
    Signed-off-by: default avatarDavid Jeffery <djeffery@redhat.com>
    Reviewed-by: default avatarXiao Ni <xni@redhat.com>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    775d7831
md.c 251 KB