• Kevin Wolf's avatar
    block: Assert serialisation assumptions in pwritev · 28de2dcd
    Kevin Wolf authored
    If a request calls wait_serialising_requests() and actually has to wait
    in this function (i.e. a coroutine yield), other requests can run and
    previously read data (like the head or tail buffer) could become
    outdated. In this case, we would have to restart from the beginning to
    read in the updated data.
    
    However, we're lucky and don't actually need to do that: A request can
    only wait in the first call of wait_serialising_requests() because we
    mark it as serialising before that call, so any later requests would
    wait. So as we don't wait in practice, we don't have to reload the data.
    
    This is an important assumption that may not be broken or data
    corruption will happen. Document it with some assertions.
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
    28de2dcd
block.c 153 KB