• Patrick Farrell's avatar
    LU-11670 osc: glimpse - search for active lock · b3461d11
    Patrick Farrell authored
    When there are lock-ahead write locks on a file, the server
    sends one glimpse AST RPC to each client having such (it
    may have many) locks. This callback is sent to the lock
    having the highest offset.
    Client's glimpse callback goes up to the clio layers and
    gets the global (not lock-specific) view of size.  The clio
    layers are connected to the extent lock through the
    l_ast_data (which points to the OSC object).
    Speculative locks (AGL, lockahead) do not have l_ast_data
    initialised until an IO happens under the lock. Thus, some
    speculative locks may not have l_ast_data initialized.
    It is possible for the client to do a write using one lock
    (changing file size), but for the glimpse AST to be sent to
    another lock without l_ast_data initialized.  Currently, a
    lock with no l_ast_data set returns ELDLM_NO_LOCK_DATA to
    the server.  In this case, this means we do not return the
    updated size.
    The solution is to search the granted lock tree for any lock
    with initialized l_ast_data (it points to the OSC object
    which is the same for all the extent locks) and to reach the
    clio layers for the size through this lock instead.
    cray-bug-id: LUS-6747
    Signed-off-by: default avatarPatrick Farrell <pfarrell@whamcloud.com>
    Change-Id: I6c60f4133154a3d6652315f155af24bbc5752dd2
    Reviewed-on: https://review.whamcloud.com/33660
    Tested-by: default avatarjenkins <devops@whamcloud.com>
    Tested-by: default avatarMaloo <maloo@whamcloud.com>
    Reviewed-by: default avatarAndreas Dilger <adilger@whamcloud.com>
    Reviewed-by: default avatarBobi Jam <bobijam@hotmail.com>
    Reviewed-by: default avatarOleg Drokin <green@whamcloud.com>