• Tao Ma's avatar
    ocfs2: Add clusters free in dealloc_ctxt. · 2891d290
    Tao Ma authored
    Now in ocfs2 xattr set, the whole process are divided into many small
    parts and they are wrapped into diffrent transactions and it make the
    set doesn't look like a real transaction. So we want to integrate it
    into a real one.
    
    In some cases we will allocate some clusters and free some in just one
    transaction. e.g, one xattr is larger than inline size, so it and its
    value root is stored within the inode while the value is outside in a
    cluster. Then we try to update it with a smaller value(larger than the
    size of root but smaller than inline size), we may need to free the
    outside cluster while allocate a new bucket(one cluster) since now the
    inode may be full. The old solution will lock the global_bitmap(if the
    local alloc failed in stress test) and then the truncate log. This will
    cause a ABBA lock with truncate log flush.
    
    This patch add the clusters free in dealloc_ctxt, so that we can record
    the free clusters during the transaction and then free it after we
    release the global_bitmap in xattr set.
    Signed-off-by: default avatarTao Ma <tao.ma@oracle.com>
    Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
    2891d290
alloc.c 181 KB