• Jens Axboe's avatar
    io_uring/fdinfo: remove need for sqpoll lock for thread/pid retrieval · a0d45c3f
    Jens Axboe authored
    A previous commit added a trylock for getting the SQPOLL thread info via
    fdinfo, but this introduced a regression where we often fail to get it if
    the thread is busy. For that case, we end up not printing the current CPU
    and PID info.
    
    Rather than rely on this lock, just print the pid we already stored in
    the io_sq_data struct, and ensure we update the current CPU every time
    we've slept or potentially rescheduled. The latter won't potentially be
    100% accurate, but that wasn't the case before either as the task can
    get migrated at any time unless it has been pinned at creation time.
    
    We retain keeping the io_sq_data dereference inside the ctx->uring_lock,
    as it has always been, as destruction of the thread and data happen below
    that. We could make this RCU safe, but there's little point in doing that.
    
    With this, we always print the last valid information we had, rather than
    have spurious outputs with missing information.
    
    Fixes: 7644b1a1 ("io_uring/fdinfo: lock SQ thread while retrieving thread cpu/pid")
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    a0d45c3f
fdinfo.c 6.65 KB