• Jinshan Xiong's avatar
    staging/lustre/clio: cl_lock simplification · 06563b56
    Jinshan Xiong authored
    In this patch, the cl_lock cache is eliminated. cl_lock is turned
    into a cacheless data container for the requirements of locks to
    complete the IO. cl_lock is created before I/O starts and destroyed
    when the I/O is complete.
    
    cl_lock depends on LDLM lock to fulfill lock semantics. LDLM lock
    is attached to cl_lock at OSC layer. LDLM lock is still cacheable.
    
    Two major methods are supported for cl_lock: clo_enqueue and
    clo_cancel.  A cl_lock is enqueued by cl_lock_request(), which will
    call clo_enqueue() methods for each layer to enqueue the lock.
    At the LOV layer, if a cl_lock consists of multiple sub cl_locks,
    each sub locks will be enqueued correspondingly. At OSC layer, the
    lock enqueue request will tend to reuse cached LDLM lock; otherwise
    a new LDLM lock will have to be requested from OST side.
    
    cl_lock_cancel() must be called to release a cl_lock after use.
    clo_cancel() method will be called for each layer to release the
    resource held by this lock. At OSC layer, the reference count of LDLM
    lock, which is held at clo_enqueue time, is released.
    
    LDLM lock can only be canceled if there is no cl_lock using it.
    Signed-off-by: default avatarBobi Jam <bobijam.xu@intel.com>
    Signed-off-by: default avatarJinshan Xiong <jinshan.xiong@intel.com>
    Reviewed-on: http://review.whamcloud.com/10858
    Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3259Reviewed-by: default avatarJohn L. Hammond <john.hammond@intel.com>
    Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    06563b56
ldlm_lock.c 53.8 KB