• J
    nbd: handle ERESTARTSYS properly · 9dd5d3ab
    Josef Bacik 提交于
    We can submit IO in a processes context, which means there can be
    pending signals.  This isn't a fatal error for NBD, but it does require
    some finesse.  If the signal happens before we transmit anything then we
    are ok, just requeue the request and carry on.  However if we've done a
    partial transmit we can't allow anything else to be transmitted on this
    socket until we transmit the remaining part of the request.  Deal with
    this by keeping track of how much we've sent for the current request,
    and if we get an ERESTARTSYS during any part of our transmission save
    the state of that request and requeue the IO.  If anybody tries to
    submit a request that isn't our pending request then requeue that
    request until we are able to service the one that is pending.
    Signed-off-by: NJosef Bacik <jbacik@fb.com>
    Signed-off-by: NJens Axboe <axboe@fb.com>
    9dd5d3ab
nbd.c 28.7 KB